Android学习路线(十)如何将Action Bar叠放在你的布局上

默认情况下,action bar出现在activity窗口的顶部,略微减少了activity布局的总空间。如果你想隐藏或者显示action bar,在这堂用户体验的课程中,你可以通过调用hide() 和show() 方法来实现。然后这样会导致你的activity基于它的新大小重新计算和绘制布局。

Figure 1. Gallery's action bar in overlay mode.

为了避免在action bar隐藏或显示时调整你的布局,你可以为你的action bar启用overlay mode。在overlay 模式下,你的activity布局将会使用整个可用空间,就像action bar不存在一样,同时系统将action bar绘制在你的activity前面。这样盖住了顶部的一些布局,但是现在当你的action bar隐藏或显示时,系统不会调整你的布局,并且这个过渡是无缝的。

贴士: 如果你想让你的布局在action bar背后部分可见,可以为action bar创建一个半透明的自定义样式,就像图1显示的那样。更多关于如何为action bar设置背景样式,请参阅为Action Bar设置风格

启用Overlay Mode


要为action bar启用overlay mode,你需要创建一个继承自已有的action bar主题的自定义主题,并且设置android:windowActionBarOverlay 属性为true

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

Android 2.1及以上版本

如果你的应用使用Support Library 类兼容运行于低于Android 3.0版本之下的设备,你的自定义主题需要继承自Theme.AppCompat  主题(或者它的子主题)。例如:

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

同样注意这个主题包含两种 windowActionBarOverlay 样式的定义:一次以android:为前缀,一次不用。以android:为前缀适用于那些系统平台提供相应style的android版本,没有前缀的适用于那些从Support Library读取样式的老版本。

指定布局的顶端间距


当action bar在overlay mode下时,它可能挡住了那些需要显示的布局。要确保这种布局始终处于action bar的下方,使用actionBarSize.的值来制定视图相对顶部的margin或者padding。例如:

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

如果你使用的是Support Library,你需要移除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 的值在所有版本中都有效,包括Android 3.0 以及更过版本。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值