如何以编程方式为工具栏设置 app:layout_scrollFlags

How to set app:layout_scrollFlags for Toolbar programmatically

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

我强烈建议不要根据选择的选项卡更改滚动标志 - 当滚动到非 recyclerview 选项卡时,让工具栏自动 return(并且内容向下移动)会非常不和谐并且可能不是您想要的交互模式(如果您的两个 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);
}