首页 > 解决方案 > 当中间有几个其他视图层时,滚动时自动隐藏工具栏

问题描述

我希望我的活动Toolbar随着给定滚动视图的增长而平滑滚动,然后在用户向下滚动时平滑滚动回来。即scroll|enterAlways来自例如this answer的基本行为。

CoordinatorLayout但是,我的布局在包含ToolbarScrollView应该驱动所有内容之间有一些层。与此答案不同,我想要以下布局:

CoordinatorLayout
  AppBarLayout
    Toolbar
  LinearLayout [vertical]
    LinearLayout [vertical]
      ImageView
      ScrollView

看似多余LinearLayout的两个是用于背景色控制的;和的想法ImageViewScrollView我的用户界面应该是这样的:

+------------+
|TOOLBAR    =|
+------------+
|            |
|   IMAGE    |
|            |
|111111111111| 
|222222222222|
|333333333333|
|444444444444|
+------------+

然后应该滚动到

+TOOLBAR----=+
+------------+
|            |
|   IMAGE    |
|            |
|111111111111| 
|222222222222|
|333333333333|
|444444444444|
|555555555555|
+------------+

并进一步

+------------+
|            |
|   IMAGE    |
|            |
|111111111111| 
|222222222222|
|333333333333|
|444444444444|
|555555555555|
|666666666666|
+------------+

然后到

+------------+
|            |
|   IMAGE    |
|            |
|222222222222|
|333333333333|
|444444444444|
|555555555555|
|666666666666|
|777777777777| 
+------------+

(用数字表示 中的事物ScrollView)。

我可以通过设置 as 标准app:layout_scrollFlags="scroll|enterAlways"来获得上述行为。Toolbar但是,如果我然后开始向下拖动ScrollViewToolbar则不会回来。事实上,Toolbar一旦它滚动出去,我还没有找到任何方法让它回来。

标签: androidmaterial-designandroid-toolbar

解决方案


事实证明我需要使用NestedScrollView,因为不像它的名字向我建议的那样,它不仅用于ScrollView将 s 嵌套到其他ScrollViews 中,还用于将 a 嵌套ScrollView在其他容器中:

NestedScrollView就像ScrollView,但它支持在新旧版本的 Android 上同时充当嵌套滚动父项和子项。


推荐阅读