【Android Developers Training】 9. 覆盖于布

系统 1676 0

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接: http://developer.android.com/training/basics/actionbar/overlaying.html


默认的,Acton Bar会显示在你的activity窗口的上部,使得它会稍许减少了activity布局的剩余空间。如果在用户的UI交互过程中,你希望可以隐藏和显示Action Bar,你可以通过调用其 hide() show() 这两个方法来实现。然而,这会导致你的 activity 在新尺寸的基础上重新计算和绘制布局。

为了避免在Action Bar隐藏和显示的时候重新调整布局的尺寸,你可以使用Action Bar的覆盖模式( overlay mode )。当在 覆盖模式 中,你的activity会使用屏幕上所有的空间,就好像action bar不在那儿一样,然后系统会将action bar绘制于你的布局之上。这会使得布局中顶部的一部分被遮蔽,但是现在这个时候对action bar进行隐藏或者显示的时候,系统就不需要重新调整布局的尺寸,使得画面过渡平滑而自然。

Tip:

如果你希望你的布局在你的Action Bar之后是部分可见的,可以为action bar创建一个半透明的自定义背景,如图1所示。关于如何自定义Action Bar的风格,可以阅读: Styling the Action Bar 。(博客链接: http://www.cnblogs.com/jdneo/p/3444484.html

图1. Gallery的覆盖于布局之上(overlay mode)的Action Bar

 

一). 启用覆盖模式

为了启用Action Bar的覆盖模式,你需要创建一个继承自一个存在了的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: ”前缀的版本适用于包含了这个风格的Android平台,而没有的版本适用于那些较古老的版本,风格从“ Support Library ”中获取。

 

二). 指定布局的顶部边缘

当Action Bar在覆盖模式时,它可能会遮蔽你的一部分本应该要可见的布局。为了保证这些元素永远处于action bar的下方,可以通过添加顶部View的外边距( margin )或者内边距( padding ),可以使用 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
      
      
        >
      
    

如果你使用的是“ 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和更高版本。

【Android Developers Training】 9. 覆盖于布局之上的Action Bar


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论