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

覆盖模式的操作栏

默认情况下,操作栏出现在你的 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或更高版本。

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值