我使用新的设计库有一个非常标准的布局:
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView/>
<Toolbar/>
</CollapsingToolbarLayout>
</AppBarLayout>
<android.support.v4.widget.NestedScrollView/> <!-- content here -->
我想要做的是完全以AppBarLayout
编程方式隐藏整个,暂时摆脱Toolbar
它及其折叠功能。
所以我这样称呼:
private void disableCollapsing() {
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
p.setScrollFlags(0);
collapsingToolbarLayout.setLayoutParams(p);
}
禁用折叠行为(效果很好),最后是:
@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();
}
我将 AppBarLayout 翻译到顶部(工作顺利),并且在动画集的末尾是对View.GONE
.
问题
在动画结束时,无论我是否也将可见性设置为 GONE,我都无法获得之前被AppBarLayout
. 我的 NestedScrollView 仍然被限制在屏幕的下半部分,就好像 AppBarLayout 仍然存在(不是)。我该如何解决?
隐藏前:
隐藏后(AppBar 翻译到顶部):
如您所见,顶部空间是空的且无法访问。滚动视图在它之前的边距内滚动,好像可见性变化不是由CoordinatorLayout
.
我试过打电话
coordinator.requestLayout()
,没有成功。我还尝试将 AppBarLayout 设置
app:anchor
为我的 NestedScrollView,但这搞砸了——滚动视图甚至在隐藏之前就占据了整个屏幕。进入此hidden-AppBar 模式时,我正在考虑
Behavior
在滚动视图上设置一个自定义,但我无法开始。