我在我的应用中使用Collapsible Toolbar
。在活动启动时,可折叠工具栏处于展开状态,启用了滚动功能并且正常运行。但是现在我需要在我的API失败的情况下显示全屏错误布局。在这种情况下,我必须折叠工具栏并阻止滚动效果。
错误布局显示重试按钮。在重试时我再次进行API调用,如果API成功,我必须再次展开工具栏并启用滚动效果。
我能够使用setExpanded
(标记,动画)折叠工具栏,但在这种情况下,我无法在显示错误布局时阻止可折叠工具栏的滚动效果。
我需要提供一种阻止以及解锁滚动效果+展开/折叠工具栏的方法。任何帮助将非常感激.. !!!
答案 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
的颜色,折叠/展开标题的样式,甚至是锁定布局的高度...如果您在外部单击它,也可以隐藏展开的布局。它可以在扩展布局中支持NestedScrollView
和ScrollView
。 The documentation和示例应用程序可在Github上获得。
对于那些不想使用该库的人,my previous answer显示了这样做的方法。这是上一个答案的输出:
基本上,这是相同的概念,但不需要编写完整的类,使用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);
}