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);`之后