Android 块与展开/折叠可折叠工具栏一起滚动

Android 块与展开/折叠可折叠工具栏一起滚动,android,android-layout,android-animation,android-toolbar,android-collapsingtoolbarlayout,Android,Android Layout,Android Animation,Android Toolbar,Android Collapsingtoolbarlayout,我在我的应用程序中使用了可折叠工具栏。在activity launch上,可折叠工具栏处于展开状态,并启用了滚动,并且工作正常。但现在我需要在API失败的情况下显示全屏错误布局。在这种情况下,我必须折叠工具栏,阻止滚动效果 错误布局显示重试按钮。在重试时,我再次调用API,若API成功,我必须再次展开工具栏并启用滚动效果 我可以使用setExpanded(标志,动画)折叠工具栏,但在这种情况下,当显示错误布局时,我无法阻止可折叠工具栏的滚动效果 我需要提供一种方法来阻止以及取消阻止滚动效果+展开

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

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

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


我需要提供一种方法来阻止以及取消阻止滚动效果+展开/折叠工具栏。任何帮助都将不胜感激

如果您使用(微调器)来传达错误,并显示您正在执行操作,则可以在应用程序执行操作时阻止用户输入。

将错误布局设置为与可折叠工具栏重叠。同时将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>

一个简单的解决方案就是使用属性

android:visibility=“gone” 对于您不想显示的内容,只需使用propertyandroid:visibility=“visible”

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

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

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

正如我所说,
工具栏
的高度是关键:
折叠工具栏布局
将折叠到
工具栏
的高度,并将展开到
AppBarLayout
的高度

使用此库,您必须设置两种布局,即
工具栏
和扩展布局(用于锁定屏幕和滚动),它将创建一个
折叠工具栏布局
,并在内部膨胀这些布局

您可以声明动画持续时间、内部
折叠工具栏布局的颜色、折叠/展开标题的样式,甚至锁定布局的高度。。。如果在展开的布局外部单击,也可以隐藏该布局。它可以在扩展的布局中支持嵌套的滚动视图和滚动视图。Github上提供了一个示例应用程序


对于那些不想使用该库的人,演示如何使用该库。以下是上一个答案的输出:

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



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

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

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

你能提供一些代码吗?我的要求是使用错误布局。这就是我不能在这里使用警报对话框的原因。你能和客户讨论一下吗?AlertDialog是为类似这样的东西设计的,而创建其他东西则与Android体验背道而驰。(它从未阻止一个人尝试其他东西,但)警报对话框不是必需的,因为它将关闭,屏幕将显示为空白。我们需要一个带有重试按钮的错误布局来再次点击API。但在这种情况下,滚动也不会被禁用。在这种情况下,我可以展开/折叠可折叠工具栏。您好,非常感谢您的帮助。你能提供完整的代码吗。请将代码上载到git。在我们再次展开工具栏后,您的代码未显示如何启用反向滚动。你能不能也分享一下代码片段。当调用
setAppBarDraging
和`appBarLayout.setExpanded(true,true);`之后