转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992
本篇文章翻译自http://developer.android.com/training/basics/actionbar/overlaying.html,想查看原文的同学可以自己翻墙看。
默认的,ActionBar会出现在你的Activity的窗口上面,这样可能会减少剩下的Activity的可见区域的大小。如果,在用户的交互的过程中,你想要隐藏或者是展示ActionBar,你可以通过hide()或者是show()方法来控制ActionBar的显示与否。然而,这会导致你的Activity根据新的面积重新计算和绘制布局。
为了避免当ActionBar的显示状态发生改变的时候也改变布局,你可以通过设置ActionBar的overlay模式来达到这个目的。当我们使用overlay模式的时候,我们的activity可以使用所有的位置,这是因为系统在绘制ActionBar的时候,是直接绘制在布局上面的。这样掩盖了布局的顶部,但是当ActionBar显示或者是隐藏的时候,系统不需要重新计算布局,在过渡的时候也是一样的。
小提示:如果你想你的布局在ActionBar的后面是部分可见的,也就是有点透明的效果,那么你需要创建一个自定义一个ActionBar的style,然后设置一个透明的背景,关于设置自定义ActionBar背景的操作,请参考style the action bar.
启动Overlay模式
如果我们需要开启Overlay模式,那么我们需要继承一个已有的ActionBar的theme,然后自定义 android:windowActionBarOverlay属性为true。
兼容3.0以上版本
如果要兼容这个版本,那么我们可以使用下面的代码
<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以上的版本,并且使用版本兼容库的话,那么我们就必须自定义一个继承自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>
需要注意的是,如果要兼容2.1,那么我们需要定义两个item属性,一个是带有android:的,一个是不带的,分别对应非兼容库和兼容库的。
如果我们使用了overlay模式之后,在Activity上原本应该显示的位置的内容可能会被遮挡,为了解决这个问题,我们可以设置父布局的padding或者是margen属性,防止内容被遮挡,下面的代码完成了这个功能:
<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:attr/actionBarSize是一个固定值。如果我们要支持低版本的话,那么应该把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>
在这种情况下,不管是在高版本还是低版本,都能够正常的工作。