我的应用程序有一个viewpager和4个标签页,每个标签页有很多片段。但我只是想我的工具栏滚动向上/向下滚动,同时滚动回收视图在2个特定的标签页。但我不知道如何阻止工具栏滚动为其他标签页。我试图导入工具栏为每个片段,但似乎我不能做到这一点。有人有办法解决这个问题吗?
nimxete21#
我强烈建议不要根据所选的选项卡来更改滚动标志-a滚动到非recyclerview选项卡时,让工具栏自动返回(并且内容向下移动)可能会非常不和谐,而且可能不是您想要的交互模式(如果您的两个RecyclerView选项卡紧挨着,则会令人恼火)。但是,如果您想亲自查看,可以使用setScrollFlags()以编程方式设置滚动标志:
RecyclerView
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)
hfsqlsce2#
// 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); }
xcitsw883#
Kotlin版本,便于复制和粘贴。应与core-ktx-1.8.0库一起使用
core-ktx-1.8.0
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 } }
3条答案
按热度按时间nimxete21#
我强烈建议不要根据所选的选项卡来更改滚动标志-a滚动到非recyclerview选项卡时,让工具栏自动返回(并且内容向下移动)可能会非常不和谐,而且可能不是您想要的交互模式(如果您的两个
RecyclerView
选项卡紧挨着,则会令人恼火)。但是,如果您想亲自查看,可以使用setScrollFlags()以编程方式设置滚动标志:
为了清除标志
hfsqlsce2#
xcitsw883#
Kotlin版本,便于复制和粘贴。应与
core-ktx-1.8.0
库一起使用