注:本文翻译自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的更多相关文章

  1. 【Android Developers Training】 5. 序言:添加Action Bar

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

  2. 【Android Developers Training】 73. 布局变化的动画

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

  3. 【Android Developers Training】 4. 启动另一个Activity

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

  4. 【Android Developers Training】 3. 构建一个简单UI

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

  5. 【Android Developers Training】 2. 运行你的应用

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

  6. 【Android Developers Training】 105. 显示一个位置地址

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

  7. 【Android Developers Training】 101. 显示快速联系人挂件(Quick Contact Badge)

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

  8. 【Android Developers Training】 100. 使用Intent修改联系人数据

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

  9. 【Android Developers Training】 98. 获取联系人列表

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

随机推荐

  1. CVE-2014-0038内核漏洞原理与本地提权利用代码实现分析 作者:seteuid0

    关键字:CVE-2014-0038,内核漏洞,POC,利用代码,本地提权,提权,exploit,cve analysis, privilege escalation, cve, kernel vuln ...

  2. Java中 EvenQueue.invokeLater用法

    在Java中Swing是线程不安全的,是单线程的设计,这样的造成结果就是:只能从事件派发线程访问将要在屏幕上绘制的Swing组件.事件派发线程是调用paint和update等回调方法的线程,它还是事件 ...

  3. html学习笔记 - 标签

    单标签 : <!DOCTYPE html> 解析类型标签 <!-- xxx --> 注释标签 <br /> 换行标签 <hr /> 分割线标签 < ...

  4. Java基础知识二次学习--第三章 面向对象

    第三章 面向对象   时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...

  5. Dorado7与@ManyToMany的矛盾分析

    在Dorado7开发时,通过UpdateAction提交数据,默认只会提交DataSet中DirtyTree,这样如果子对象数据未发生修改时是不会提交的,后台拿到的子对象为空.如果两对象之间,通过JP ...

  6. Microsoft Azure IoTHub Serials 1 - 使用Android设备与Azure IoTHub进行交互

    Azure IoTHub的目标是为物联网的应用场景提供方便的设备接入,完成消息的发送和接收(C2D和D2C).经过持续不断的努力,目前Azure IoTHub已经支持多种操作系统设备的接入,包括And ...

  7. IT培训行业揭秘(六)

    2017年全国的IT职业培训机构的招生数量相比于去年同期都出现了大规模的下滑,虽然目前大学生毕业之后参加培训班的人数依然没有变化,但是目前中小培训机构像雨后春笋般的纷纷建立,他们纷纷抢占市场,为了招生 ...

  8. python基础学习笔记

    #!/usr/bin/env python #coding=utf-8 def login(username): if username=='bill': return 1 else: return ...

  9. 深入tornado中的http1connection

    前言 tornado中http1connection文件的作用极其重要,他实现了http1.x协议. 本模块基于gen模块和iostream模块实现异步的处理请求或者响应. 阅读本文需要一些基础的ht ...

  10. HTMLTestRunner测试报告美化

    前言 ​最近小伙伴们在学玩python,,看着那HTMLTestRunner生成的测试报告,左右看不顺眼,终觉得太丑.搜索了一圈没有找到合适的美化报告,于是忍不住自已动手进行了修改,因习惯python ...