动态更改工具栏和CollapsingToolbarLayout的滑动标志

15

我有一个只有一个Activity的安卓应用程序,其中包含许多fragment。当我显示列表界面时,我希望使用Toolbarapp:layout_scrollFlags="scroll|enterAlways"属性。而在详细信息fragment中,我想使用CollapsingToolbarLayout并在其中放置一个图像。由于这是一个只有一个Activity的应用程序,我只有一个Toolbar。是否可以通过编程方式修改我的布局以适应这两种情况?

3个回答

16

是的。假设您从可折叠工具栏布局片段切换到工具栏片段。

  1. 使用AppBarLayout.setExpanded(false)折叠您的AppBarLayout;

  2. 更改滚动标志以适应您的需求。

AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
p.setScrollFlags(...);
toolbar.setLayoutParams(p);

如果需要的话,CollapsingToolbarLayout也是一样的。我猜应该是这样的:

collapsingToolbarParams.setScrollFlags(0); //no flags for ctl
toolbarParams.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS); //new flags for toolbar

我也遇到了这个问题。看起来我忘记调用 setLayoutParams() 方法了。感谢您的答案! - Mauker
1
setScrollFlags(0) 可以正常工作,但是当我尝试将其设置为以下内容时:params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP); // 清除所有滚动标志 toolbar.setLayoutParams(params); 就无法正常工作了。 - iBobb

11

我发现它起作用了

public void disableToolBarScrolling() {
    CollapsingToolbarLayout toolbar = findViewById(R.id.collap_toolbar);
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(0);
}

public void enableToolBarScrolling() {
    CollapsingToolbarLayout toolbar = findViewById(R.id.collap_toolbar);
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS);
}

0

对我来说可行。

public void enableToolBarScrolling(CollapsingToolbarLayout toolbar) {
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS);
    toolbar.setLayoutParams(params);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接