阻止滚动以及展开/折叠可折叠工具栏

时间:2016-12-10 14:32:54

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

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

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

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

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

5 个答案:

答案 0 :(得分:2)

进行错误布局,使其与Collapsible Toolbar重叠。同时将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>

答案 1 :(得分:1)

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

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

使用此库,您必须将两个布局设置为Toolbar和扩展布局(用于锁定屏幕和滚动),它将创建一个CollapsingToolbarLayout并在其中扩充这些布局。 / p>

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

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

Prevent toolbar to expand with custom error layout

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

<强>机器人:能见度= “水涨船高” 对于您不想显示的内容,只需使用属性 android:visibility =“visible”

使错误布局可见

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

一旦屏幕上看不到内容,只显示错误布局,您将获得所需的结果。希望这会对你有所帮助。

答案 4 :(得分:0)

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

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);
    }