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

e5nszbig  于 2022-12-09  发布在  Android
关注(0)|答案(3)|浏览(133)

我的应用程序有一个viewpager和4个标签页,每个标签页有很多片段。但我只是想我的工具栏滚动向上/向下滚动,同时滚动回收视图在2个特定的标签页。但我不知道如何阻止工具栏滚动为其他标签页。我试图导入工具栏为每个片段,但似乎我不能做到这一点。有人有办法解决这个问题吗?

nimxete2

nimxete21#

我强烈建议不要根据所选的选项卡来更改滚动标志-a滚动到非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)
hfsqlsce

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);
}
xcitsw88

xcitsw883#

Kotlin版本,便于复制和粘贴。应与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
    }
}

相关问题