以编程方式更改 Toolbar 和 CollapsingToolbarLayout 滚动标志

Posted

技术标签:

【中文标题】以编程方式更改 Toolbar 和 CollapsingToolbarLayout 滚动标志【英文标题】:Changing Toolbar and CollapsingToolbarLayout scroll flags programmatically 【发布时间】:2015-12-01 19:49:55 【问题描述】:

我有一个包含大量片段的 Activity android 应用。当我显示列表屏幕时,我想将Toolbarapp:layout_scrollFlags="scroll|enterAlways" 属性一起使用。在细节片段中,我想使用带有图像的CollapsingToolbarLayout。因为它是一个单一的 Activity 应用程序,所以我只有一个 Toolbar。是否可以通过编程方式修改我的布局以适应这两种情况?

【问题讨论】:

【参考方案1】:

是的。假设您要从 CollapsingToolbarLayout 片段转到工具栏片段。

    你使用AppBarLayout.setExpanded(false)折叠你的AppBarLayout

    您可以根据需要更改滚动标志。

    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() 方法。感谢您的回答! setScrollFlags(0) 工作正常,但是当我尝试将其设置为此时: params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP); // 清除所有滚动标志 toolbar.setLayoutParams(params);不工作..【参考方案2】:

我发现它有效

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

【讨论】:

【参考方案3】:

为我工作。

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

【讨论】:

以上是关于以编程方式更改 Toolbar 和 CollapsingToolbarLayout 滚动标志的主要内容,如果未能解决你的问题,请参考以下文章

IOS Swift以编程方式创建的navigationController TOOLBAR(底栏)项目操作不起作用

以编程方式位于底部的 UIToolbar

以编程方式更改 UINavigationbar 背景颜色和标题字体/颜色

以编程方式更改 MediaController 图标

Android:以编程方式更改 RadioButtons 和复选框的颜色

以编程方式更改标签栏和导航栏的颜色