隐藏AppBarLayout并将其空间分配给剩余视图

nat*_*rio 17 android android-layout android-design-library android-coordinatorlayout

我使用新的设计库有一个非常标准的布局:

<AppBarLayout>
    <CollapsingToolbarLayout>
        <ImageView/>
        <Toolbar/>
    </CollapsingToolbarLayout>
</AppBarLayout>

<android.support.v4.widget.NestedScrollView/> <!-- content here -->
Run Code Online (Sandbox Code Playgroud)

我想要做的是完全隐藏整个AppBarLayout程序,暂时摆脱Toolbar它及其崩溃功能.

所以我称之为:

private void disableCollapsing() {
    AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
    p.setScrollFlags(0);
    collapsingToolbarLayout.setLayoutParams(p);
}
Run Code Online (Sandbox Code Playgroud)

禁用折叠行为(效果很好),最后这个:

@Override
public void hide() {
    final AppBarLayout layout = (AppBarLayout) findViewById(R.id.appbar);

    layout.animate().translationY(-layout.getHeight())
            .setListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    layout.setVisibility(View.GONE);
                }
            }).start();
}
Run Code Online (Sandbox Code Playgroud)

我将AppBarLayout转换为顶部(工作顺利),并且在动画集的末尾是可见性View.GONE.

问题

在动画结束时,无论我是否也将可见性设置为GONE,我都无法获得之前占用的空间AppBarLayout.我的NestedScrollView仍然局限在屏幕的下半部分,好像AppBarLayout仍在那里(不是).我该如何解决?

隐藏之前:

之前

隐藏后(AppBar翻译到顶部):

后

如您所见,顶部空间是空的,无法访问.滚动视图在其之前的边距内滚动,就好像可见性变化不是由CoordinatorLayout.

  • 我试过打电话coordinator.requestLayout(),没有成功.

  • 我也尝试将AppBarLayout设置app:anchor为我的NestedScrollView,但这会搞砸 - 滚动视图最终会在隐藏之前占据整个屏幕.

  • 我想Behavior在进入这个隐藏的AppBar模式时在滚动视图上设置自定义,但我无法开始.

小智 19

是的,这看起来像一个错误,我解决了这个问题,我的应用程序将appbar高度设置为0:

android.support.design.widget.AppBarLayout appbar = (android.support.design.widget.AppBarLayout) findViewById(R.id.appbar);

CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams();

lp.height = 0;

appbar.setLayoutParams(lp);
Run Code Online (Sandbox Code Playgroud)