【Android界面实现】Overlaying the Action Bar

    转载请注明出处: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>

    在这种情况下,不管是在高版本还是低版本,都能够正常的工作。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。