注:本文翻译自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(或它的衍生的主题)作为你的父主题,例如:

  1. <resources>
  2. <!-- the theme applied to the application or activity -->
  3. <style name="CustomActionBarTheme"
  4. parent="@android:style/Theme.Holo">
  5. <item name="android:windowActionBarOverlay">true</item>
  6. </style>
  7. </resources>

对于Android 2.1或更高

如果你的应用使用“Support Library”来解决低于Android 3.0设备上的兼容性问题,你的主题应该使用Theme.AppCompat主题(或它的衍生的主题)作为你的父主题,例如:

  1. <resources>
  2. <!-- the theme applied to the application or activity -->
  3. <style name="CustomActionBarTheme"
  4. parent="@android:style/Theme.AppCompat">
  5. <item name="android:windowActionBarOverlay">true</item>
  6.  
  7. <!-- Support library compatibility -->
  8. <item name="windowActionBarOverlay">true</item>
  9. </style>
  10. </resources>

注意到这个主题包含了“windowActionBarOverlay”风格的两处定义:一个有“android:”前缀而另一个没有。有“android:”前缀的版本适用于包含了这个风格的Android平台,而没有的版本适用于那些较古老的版本,风格从“Support Library”中获取。

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

当Action Bar在覆盖模式时,它可能会遮蔽你的一部分本应该要可见的布局。为了保证这些元素永远处于action bar的下方,可以通过添加顶部View的外边距(margin)或者内边距(padding),可以使用actionBarSize中指定了的高度值。例如:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:paddingTop="?android:attr/actionBarSize">
  5. ...
  6. </RelativeLayout>

如果你使用的是“Support Library”,你需要移去“android:”前缀,例如:

  1. <!-- Support library compatibility -->
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingTop="?attr/actionBarSize">
  6. ...
  7. </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. spring boot入门

    一.对spring boot的解释:(百度百科) Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行 ...

  2. trap-接收信号_采取行动

    trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作. kill和trap等都可以看到信号编号及其关联的名称. "信号"是指那些被异步发送到 ...

  3. winows 服务器环境搭建 (碰到了windows服务器,小记一下吧~)

    1.连接远程服务器  安装wamp 2.查看wamp 默认端口号是否与对应windows 服务器冲突,如果冲突,则改之 WAMP装好之后默认的端口是80,但是这个80端口呢,可以热门端口啊,迅雷,II ...

  4. Day2-字符编码转换

    1.在python2默认编码是ASCII, python3里默认是unicode 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so ...

  5. Android利用文本分割拼接开发一个花藤文字生成

    今天研究了一个小软件,挺有意思的,尽管网上已经很多那种软件,但是今天还是在这里给大家分享一下这个软件的具体开发过程 首先,这个软件只需要三个主要控件,EditText.Button以及TextView ...

  6. java中为什么实体类需要实现序列化

    当客户端访问某个能开启会话功能的资源,web服务器就会创建一个HTTPSession对象,每个HTTPSession对象都会占用一定的内存,如果在同一个时间段内访问的用户太多,就会消耗大量的服务器内存 ...

  7. 分布式版本控制git常见问题之gitignore冲突

    所见即所得,建议大家用可视化的SourceTree专为git打造的,非常好用,废话不多说了. 原因是有人提交了.gitignore里面的内容,所以和本地的不一样,这样就有问题,那么pull都不可以,所 ...

  8. Android Weekly Notes Issue #258

    Android Weekly Issue #258 May 21st, 2017 Android Weekly Issue #258 本期内容: 围绕着Google I/O的热潮, 本周的posts除 ...

  9. java 与操作系统进程同步问题(二)————经典消费者生产者问题

    http://www.cnblogs.com/zyp4614/p/6033757.html (java 与操作系统进程同步问题(一)----互斥问题) 今天写的是最经典的生产者消费者问题,最简单的版本 ...

  10. scroll抖动问题

    参考软文: http://www.cnblogs.com/coco1s/p/5499469.html function throttle(func, wait, mustRun) { var time ...