我正在使用 AppCompat-v21 的新工具栏。我想要做的是在用户开始向下滚动时隐藏操作栏,并在用户向上滚动时再次显示操作栏。它就像谷歌播放应用程序。我在工具栏下方也有一个选项卡布局,例如 google play 应用程序。那需要留在那里。
我尝试使用来自 google IO 应用程序的代码。但是它使工具栏消失,并且在工具栏消失时主要内容不会向上移动。工具栏之前的位置仍然存在空白空间。也许是因为该实现仅适用于列表和网格视图。
知道怎么做吗?
我正在使用 AppCompat-v21 的新工具栏。我想要做的是在用户开始向下滚动时隐藏操作栏,并在用户向上滚动时再次显示操作栏。它就像谷歌播放应用程序。我在工具栏下方也有一个选项卡布局,例如 google play 应用程序。那需要留在那里。
我尝试使用来自 google IO 应用程序的代码。但是它使工具栏消失,并且在工具栏消失时主要内容不会向上移动。工具栏之前的位置仍然存在空白空间。也许是因为该实现仅适用于列表和网格视图。
知道怎么做吗?
您需要做的基本上是创建自己的 ActionBar 主题,将 windowActionBarOverlay 设置为 true:
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@android:style/Theme.AppCompat">
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
</style>
这与听起来完全一样 - 它位于您当前视图的顶部。但是,这也意味着您需要在主视图的顶部添加一个额外的边距以说明 ActionBar 覆盖。
<!-- Support library compatibility -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize">
...
</RelativeLayout>
一旦您启动并运行您的自定义 ActionBar 主题,您应该不会再看到额外的空间。这些代码片段直接取自Android Developer Training Guide。按照链接获取有关 ActionBarOverlay 工作原理的更多详细信息。
更简单的方法是使用app:layout_scrollFlags
.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
所以 Toolbar 会自动检测滚动并开始隐藏或显示。
PS如果您使用的是ListView
,您需要将其更改为RecycleView