CollapsingToolbar 不适用于不太高的内容
CollapsingToolbar not working with not-so-tall content
我很确定这是一个错误,所以我要求解决方法。我的布局是这样的:
<CoordinatorLayout>
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView/>
<Toolbar/>
</CollapsingToolbarLayout>
</AppBarLayout>
<android.support.v4.widget.NestedScrollView/> <!-- content here -->
</CoordinatorLayout>
我正在从网络上检索内容,但我不知道它有多高 - 可能只有几行,也可能很长。
但是,我发现 CollapsingToolbar
在内容不够大无法覆盖整个屏幕时效果不佳。案例:
content.height > screen.height
:有效;轻扫 top/bottom 展开和折叠工具栏,以及滚动内容;
content.height < screen.height
:不会。那不好,因为大多数时候(content.height + expandedToolbar.height) > screen.height
!
换句话说,当content不够高时,即使content+expandedToolbar比整个屏幕高很多,它也不会响应滚动手势并显示一些错误 - 可能需要十次手势才能稍微折叠工具栏。所以你很难到达内容的底部,隐藏在底部因为工具栏被展开了。
任何解决方法?
如果你想尝试,就拿 cheesesquare 示例项目并删除(或减少)activity_detail.xml [API17 here]
中 NestedScrollView
里面的内容
诀窍是将 android:layout_gravity="fill_vertical"
添加到 NestedScrollView
。这样,工具栏可以平滑折叠和展开,并对任何非空 NestedScrollView
的滚动手势做出反应,无论其大小如何。
当然,如果滚动视图为空,工具栏不会通过在屏幕的“内容”部分滚动而折叠。但这对我来说似乎并不那么糟糕。
更新
看起来此解决方案在内容较大时存在一些问题,因为内容的最底部将保持隐藏状态。我发现隐藏部分(看起来)与折叠的工具栏高度一样大。这使得定义解决方法变得容易 - 只需在 ScrollView 的底部添加一个边距,以便它被测量并释放底部的隐藏部分。因此:
android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"
或您在视图中为 Toolbar
指定的任何大小。请注意,此解决方案适用于小型和大型内容,但对于较小的内容,滚动不是那么流畅。
更新 2(2015 年 7 月)
从早期测试来看,该错误似乎已在支持设计库的 v22.2.1 版本中修复。
我很确定这是一个错误,所以我要求解决方法。我的布局是这样的:
<CoordinatorLayout>
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView/>
<Toolbar/>
</CollapsingToolbarLayout>
</AppBarLayout>
<android.support.v4.widget.NestedScrollView/> <!-- content here -->
</CoordinatorLayout>
我正在从网络上检索内容,但我不知道它有多高 - 可能只有几行,也可能很长。
但是,我发现 CollapsingToolbar
在内容不够大无法覆盖整个屏幕时效果不佳。案例:
content.height > screen.height
:有效;轻扫 top/bottom 展开和折叠工具栏,以及滚动内容;content.height < screen.height
:不会。那不好,因为大多数时候(content.height + expandedToolbar.height) > screen.height
!
换句话说,当content不够高时,即使content+expandedToolbar比整个屏幕高很多,它也不会响应滚动手势并显示一些错误 - 可能需要十次手势才能稍微折叠工具栏。所以你很难到达内容的底部,隐藏在底部因为工具栏被展开了。
任何解决方法?
如果你想尝试,就拿 cheesesquare 示例项目并删除(或减少)activity_detail.xml [API17 here]
中NestedScrollView
里面的内容
诀窍是将 android:layout_gravity="fill_vertical"
添加到 NestedScrollView
。这样,工具栏可以平滑折叠和展开,并对任何非空 NestedScrollView
的滚动手势做出反应,无论其大小如何。
当然,如果滚动视图为空,工具栏不会通过在屏幕的“内容”部分滚动而折叠。但这对我来说似乎并不那么糟糕。
更新
看起来此解决方案在内容较大时存在一些问题,因为内容的最底部将保持隐藏状态。我发现隐藏部分(看起来)与折叠的工具栏高度一样大。这使得定义解决方法变得容易 - 只需在 ScrollView 的底部添加一个边距,以便它被测量并释放底部的隐藏部分。因此:
android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"
或您在视图中为 Toolbar
指定的任何大小。请注意,此解决方案适用于小型和大型内容,但对于较小的内容,滚动不是那么流畅。
更新 2(2015 年 7 月)
从早期测试来看,该错误似乎已在支持设计库的 v22.2.1 版本中修复。