【问题标题】:How to set app:layout_scrollFlags for Toolbar programmatically如何以编程方式为工具栏设置 app:layout_scrollFlags
【发布时间】:2015-08-26 13:55:03
【问题描述】:

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

【问题讨论】:

    标签: android android-fragments android-toolbar android-coordinatorlayout


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我不想那样做,但我愚蠢的客户想要它:D。
    • 在进入搜索模式(工具栏的动作模式)等特定场景中使用滚动标志确实有意义
    • 支持25.3.1后,需要调用appBarLayout.requestLayout()才能生效。
    • @Chaos 似乎是对的。您必须在您的视图上调用#setLayoutParams(...)(隐式调用requestLayout())或直接调用它。否则更改不会有任何效果。
    • 需要加toolbar.setLayoutParams(params)。工具栏上的 setLayoutParams 是更改生效所必需的,尤其是在设置和清除滚动标志之间切换时
    【解决方案2】:
    // 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多