当中间有其他几层视图时,滚动时自动隐藏工具栏

Auto-hiding toolbar on scroll, when there are several other layers of views in-between

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

但是,我的布局在包含 ToolbarCoordinatorLayout 和应该驱动一切的 ScrollView 之间有一些层。与 this answer 不同,我想要以下布局:

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

看似多余的两个LinearLayout是为了控制背景色; ImageViewScrollView 的想法是我的 UI 应该是这样的:

+------------+
|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中的事物)。

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

事实证明我需要使用 NestedScrollView,因为,与我建议的名称不同,它不仅用于将 ScrollView 嵌套到其他 ScrollView 中,而且将 ScrollView 嵌套在其他容器中:

NestedScrollView is just like ScrollView, but it supports acting as both a nested scrolling parent and child on both new and old versions of Android.