[英]How to set app:layout_scrollFlags for Toolbar programmatically
我的应用程序有一个 viewpager 和 4 个选项卡,每个选项卡都有很多片段。 但我只希望我的工具栏在 2 个特定选项卡中滚动 recyclerview 时向上/向下滚动。 但我不知道如何阻止其他选项卡的工具栏滚动。 我试图为每个片段导入工具栏,但似乎我做不到。 有人有解决这个问题的想法吗?
我强烈建议不要根据选择的选项卡更改滚动标记 - 当滚动到非回收站视图选项卡时,工具栏会自动返回(并且内容向下移动)可能非常刺耳,可能不是您想要的交互模式(如果您的两个RecyclerView
选项卡彼此相邻,则会激怒您。
但是,如果要亲自查看,可以使用setScrollFlags()以编程方式设置滚动标志:
Toolbar toolbar = ... // your toolbar within an AppBarLayout
AppBarLayout.LayoutParams params =
(AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
| AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
为了清除旗帜
params.setScrollFlags(0)
// Show toolbar when we are in maps mode
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams();
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
if(isMapIndex) {
params.setScrollFlags(0);
appBarLayoutParams.setBehavior(null);
mAppBarLayout.setLayoutParams(appBarLayoutParams);
} else {
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
mAppBarLayout.setLayoutParams(appBarLayoutParams);
}
Kotlin 版本,便于复制和粘贴。 应该与core-ktx-1.8.0
lib 一起工作
private fun SomeLayoutBinding.setScrollBehavior(enabled: Boolean) {
appBarLayoutParams.updateLayoutParams<AppBarLayout.LayoutParams> {
scrollFlags =
if (enabled) AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL or AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS
else 0
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.