4

我在我的应用程序中使用Collapsible Toolbar。在活动启动可折叠工具栏处于展开状态,并且滚动已启用,并且其正常工作正常。但是现在我有要求显示全屏错误布局以防万一我的API失败。在这种情况下,我不得不折叠滚动效果的工具栏。块滚动一起Expand/Collapse折叠工具栏

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

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

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

+0

你能提供一些代码吗? –

回答

1

我创建了一个库AppBarrr来根据我以前的答案锁定扩展模式的屏幕。

正如我所说,Toolbar的高度是关键:在CollapsingToolbarLayout会崩溃,直到Toolbar的高度,将扩大直到AppBarLayout的高度。

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

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


对于那些不想使用该库的人,my previous answer显示了这样做的方式。下面是以前的答案的输出:

Prevent toolbar to expand with custom error layout

基本上,这是同一个概念,但没有必要写一个完整的类,你只需要在XML中有一个简单的插件的lib和就是这样!


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

+0

你好,我感谢你的帮助。你能提供完整的代码吗?请将代码上传到git。 – user3492435

+0

我们再次展开工具栏后,您的代码未显示如何启用后滚动。你可以请分享代码片段吗? – user3492435

0

如果您使用AlertDialog来传达错误,并使用ProgressDialog(微调)来显示您正在做的事情,您可以在应用程序正在做它的事情时阻止用户输入。

+0

我的要求规定使用错误布局。这就是为什么我不能在这里使用警告对话框。 – user3492435

+0

你可以和客户谈谈吗? AlertDialog是为这样的东西做的,创造别的东西违背了Android体验。 (它从来没有停止尝试别的东西) – Flummox

+0

警报对话框不是必需的,因为它会消除和屏幕将显示为空白。我们需要一个错误布局,而不是重试按钮来再次点击API。 – user3492435

2

使您的错误布局,它将重叠折叠工具栏。还将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> 
0

一个简单的解决方案,你可以申请只是使用属性

机器人:知名度=“水涨船高” 对于你不想展示,只是让你错误内容布局可见通过使用属性安卓能见度父布局的底部=“可见”

地方的错误布局

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

+0

但在这种情况下滚动也没有被禁用。在这种情况下,我可以展开/折叠可折叠工具栏。 – user3492435

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); 
    } 
相关问题