69

我的应用程序有一个 viewpager 和 4 个选项卡,每个选项卡都有很多片段。但我只想让我的工具栏在 2 个特定选项卡中滚动 recyclerview 时向上/向下滚动。但我不知道如何阻止其他选项卡的工具栏滚动。我试图为每个片段导入工具栏,但似乎我做不到。有人有解决这个问题的想法吗?

4

2 回答 2

140

我强烈建议不要根据选择的选项卡更改滚动标志 - 滚动到非回收站视图选项卡时让工具栏自动返回(并且内容向下移动)可能非常不和谐,可能不是您想要的交互模式(如果您的两个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)
于 2015-06-11T04:58:51.443 回答
15
// 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);
}
于 2016-05-27T18:32:03.877 回答