在CoordinatorLayout上编程隐藏/显示工具栏

51
当我滚动RecycleView时,ToolBar会使用动画隐藏或显示。 输入图像描述 我如何通过编程将ToolBar返回?
3个回答

121
如果您的工具栏位于 AppBarLayout 中,而该 AppBarLayout 可能位于 CoordinatorLayout 中,则此代码可能适用。
AppBarLayout appBarLayout = (AppBarLayout)findViewById(R.id.appBar);
            appBarLayout.setExpanded(true, true);

或者折叠它

AppBarLayout appBarLayout = (AppBarLayout)findViewById(R.id.appBar);
            appBarLayout.setExpanded(false, true);

这里是定义

setExpanded(boolean expanded, boolean animate)

请注意,此方法从支持库v23起可用,这里有一些文档可供参考,需要注意的关键事项是:“与AppBarLayout的滚动一样,此方法依赖于该布局直接作为CoordinatorLayout的子级。


我已经尝试过这些方法,但仍然无法正常工作。更好的解决方案是动态地显示和隐藏CollapsingToolbar,并设置AppBarLayout参数。每当您显示/隐藏CollapsingToolbarLayout时,请执行以下操作:mAppBar.setLayoutParams(new CoordinatorLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - Parikshit.S.Shekhawat

11

这就是您正在寻找的东西吗?

Toolbar toolbar = findViewById(R.id.toolbar);  // or however you need to do it for your code
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(0);  // clear all scroll flags

链接:如何在使用设计支持库时以编程方式启用/禁用工具栏滚动

为了隐藏工具栏,你可以像这样做:

toolbar.animate().translationY(-toolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();

如果你想再次显示它,可以调用:

toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();

1
@johnarao07 嗨,伙计!谢谢你的回答,但对我没用。而且这个解决方案会禁用工具栏的隐藏/显示功能。我只想要显示/隐藏而不是禁用。 - Artem
@ArtemShevchenko,你解决了你的问题吗?我也遇到了类似的问题。 - user2095470

4

我的问题和@Artem非常相似,我尝试了许多修复方法,但都没有用。当您使用AppBarLayout时,@Jraco11的答案是正确的。对我而言,@johnrao07不起作用。但是,当我们使用Toolbar时,我找到了一个完美的解决方案。

通过编程隐藏工具栏

if (toolbar.getParent() instanceof AppBarLayout){
                    ((AppBarLayout)toolbar.getParent()).setExpanded(false,true);
                }

以编程方式显示工具栏

if (toolbar.getParent() instanceof AppBarLayout){
                        ((AppBarLayout)toolbar.getParent()).setExpanded(true,true);

参考原回答(由@Android HHT回答):在 Android Design 库中,滚动时如何以编程方式显示被隐藏的工具栏


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