您的位置:首页 > 其它

安卓训练-开始-添加操作栏-覆盖模式的操作栏

2014-11-10 13:29 232 查看


覆盖模式的操作栏

上一课

下一课

这节课教你

启用覆盖模式

只支持安卓 3.0或更高版本
支持安卓 2.1或更高版本

指定布局的顶部外边距

你还需要阅读

样式与主题

默认情况下,操作栏出现在你的 activity 窗口的顶部,会稍微减少你的 activity 剩余部分的可用空间。在用户交互过程中,如果你想要隐藏和显示操作栏,你可以调用
ActionBar
上的
hide()

show()
。但是,这会导致你的 activity 根据它的新的大小重算并重绘布局。



图 1. 相册的覆盖模式的操作栏。

为了避免在操作栏隐藏和显示时调整你的布局的大小,你可以为操作栏启用覆盖模式(overlay mode)。在覆盖模式下,你的 activity 布局使用所有可用空间,就像操作栏操作栏不在那里,系统在你的布局的前面绘制操作栏。这掩盖了布局顶部部分,但是现在当操作栏隐藏或出现时,系统不需要调整你的布局的大小,可以无缝地转变。

技巧:如果你想要你的布局在操作栏后面部分可见,你要为操作栏创建一个有部分透明的背景自定义样式,像 图 1 显示的那样。 更多关于怎样为操作栏定义背景的信息,参见为操作栏添加样式。

启用覆盖模式

为了让操作栏启用覆盖模式,你需要通过继承一个已存在的操作栏主题来创建一个自定义的主题,并把
android:windowActionBarOverlay
属性设为
true


只支持安卓 3.0或更高版本

如果你的
minSdkVersion
设置为
11
或更高,你的自定义主题需要使用
Theme.Holo
主题(或它的一个子孙)作为你的父主题。例如:

<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@android:style/Theme.Holo">
<item name="android:windowActionBarOverlay">true</item>
</style>
</resources>

支持安卓 2.1或更高版本

如果你的为了兼容运行比安卓 3.0低版本的设备而使用支持库,你的自定义主题需要使用
Theme.AppCompat
主题(或它的一个子孙)作为你的父主题。例如:

<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme" parent="@android:style/Theme.<strong>AppCompat</strong>">
<item name="android:windowActionBarOverlay">true</item>

<!-- Support library compatibility -->
<item name="windowActionBarOverlay">true</item>
</style>
</resources>

还需注意到,这个主题包含
windowActionBarOverlay
的两种定义方式:一种有
android:
前缀而另一种没有。有
android:
前缀的用于平台有这个样式的安卓版本,没有前缀的用于从支持库中读取样式的老版本。

指定布局的顶部外边距

当操作栏是覆盖模式时,它肯定掩盖一些你的布局中需要保持可见的一部分。为了确保这些项在所有时候都在操作栏的下面,你需要使用
actionBarSize
指定的高度给视图顶部添加外边距或内边距。例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?android:attr/actionBarSize">
...
</RelativeLayout>

如果你为操作栏使用支持库,你需要删除
android:
前缀。例如:

<!-- 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>

在这种情况下,没有前缀的值
?attr/actionBarSize
在所有版本上都可以工作,包括安装 3.0或更高版本。

上一课下一课
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: