繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM