【问题标题】:Block scroll along with Expand/Collapse Collapsible Toolbar阻止滚动以及展开/折叠可折叠工具栏
【发布时间】:2016-12-10 14:32:54
【问题描述】:

我在我的应用程序中使用了Collapsible Toolbar。在活动启动时,可折叠工具栏处于展开状态,启用滚动并且正常工作。但是现在我需要显示全屏错误布局,以防我的 API 失败。在这种情况下,我必须折叠工具栏并阻止滚动效果。

错误布局显示重试按钮。在重试时,我再次调用 API,如果 API 成功,我必须再次展开工具栏并启用滚动效果。

我可以使用setExpanded(flag, animate) 折叠工具栏,但在这种情况下,我无法在显示错误布局时阻止可折叠工具栏的滚动效果。

我需要提供一种方法来阻止和解除阻止滚动效果 + 展开/折叠工具栏。任何帮助将非常感激.. !!!

【问题讨论】:

  • 你能提供一些代码吗?

标签: android android-layout android-animation android-toolbar android-collapsingtoolbarlayout


【解决方案1】:

使您的错误布局与可折叠工具栏重叠。还将android:clickable="true" 设置为您的错误布局。

当您为错误布局设置可见性时,相应地设置工具栏滚动。

  <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#f3f3f3"
      android:orientation="vertical"
      >
<!-- Add your other layout including Collapsible Toolbar here.-->

<RelativeLayout
      android:id="@+id/errorLayout"
      android:clickable="true"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      />

</RelativeLayout>

【讨论】:

    【解决方案2】:

    根据我之前的回答,我创建了一个库 AppBarrr 以将屏幕锁定为展开模式。

    正如我所说,Toolbar 的高度是关键:CollapsingToolbarLayout 将折叠到 Toolbar 的高度,并将展开直到 AppBarLayout 的高度。

    使用这个库,你必须设置两个布局为Toolbar和你的扩展布局(用于锁定屏幕和滚动),它会创建一个CollapsingToolbarLayout并在里面膨胀这些布局。

    您可以声明动画持续时间、内部CollapsingToolbarLayout 的颜色、折叠/展开标题的样式,甚至锁定布局的高度...您也可以在展开布局外部单击时隐藏它。它可以支持扩展布局内的NestedScrollViewScrollViewThe documentation 和 Github 上提供了一个示例应用程序。


    对于那些不想使用库的人,my previous answer 显示了使用方法。这是上一个答案的输出:

    基本上,这是相同的概念,但不需要编写一个完整的类,使用lib你只需要在xml中有一个简单的小部件就可以了!


    随意使用、分叉或测试。希望它会有用;)

    【讨论】:

    • 您好弗洛,感谢您的帮助。你能提供完整的代码吗?请将代码上传到 git。
    • 您的代码没有显示在我们再次展开工具栏后如何启用向后滚动。你能不能也分享一下代码sn-p。
    【解决方案3】:

    如果您使用AlertDialog 来传达错误信息并使用ProgressDialog(微调器)来表明您正在做某事,那么您可以在您的应用正在做某事时阻止用户输入。

    【讨论】:

    • 我的要求是改用错误布局。这就是为什么我不能在这里使用警报对话框。
    • 你能和客户谈谈吗? AlertDialog 是为这样的东西而设计的,而创建其他东西违背了 Android 体验。 (它从未阻止人们尝试其他东西)
    • 不需要警报对话框,因为它会关闭并且屏幕将显示为空白。我们需要一个错误布局,而不是一个重试按钮来再次点击 API。
    【解决方案4】:

    您可以应用的一个简单解决方案就是使用该属性

    android:visibility="gone" 对于您不想显示的内容,只需使用属性 android:visibility="visible"

    使您的 错误布局 可见

    将错误布局放在父布局的底部

    一旦内容在屏幕上不可见并且错误布局仅可见,您将获得所需的结果。希望对您有所帮助。

    【讨论】:

    • 但在这种情况下滚动也不会被禁用。在这种情况下,我可以展开/折叠可折叠工具栏。
    【解决方案5】:

    您可以实现该接口并在启用或禁用折叠效果时调用其方法。

    public interface AppbarRequestListener {
        void unlockAppBarOpen();
    
        void lockAppBarClosed();
    }
    
     @Override
        public void unlockAppBarOpen() {
            appBarLayout.setExpanded(true, false);
            appBarLayout.setActivated(true);
            setAppBarDragging(false);
        }
    
        @Override
        public void lockAppBarClosed() {
            appBarLayout.setExpanded(false, false);
            appBarLayout.setActivated(false);
            setAppBarDragging(false);
    
        }
    
        private void setAppBarDragging(final boolean isEnabled) {
            CoordinatorLayout.LayoutParams params =
                    (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
            AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
            behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
                @Override
                public boolean canDrag(AppBarLayout appBarLayout) {
                    return isEnabled;
                }
            });
            params.setBehavior(behavior);
        } 
    

    【讨论】:

    • 在调用setAppBarDragging 和 `appBarLayout.setExpanded(true, true);` 之后动画停止工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多