Android 系统自4.2 開始 UI 上就没多大改变,4.4 也仅仅是添加了透明状态栏与导航栏的功能,如图







那么如今我就来给大家解说下怎样使用这个新特性,让你的 app 尾随潮流,当然假设你不在乎外观就算了,

使用这个特性能开发出非常美丽的UI,尤其对于 google 原生系统,屏幕下方的导航栏白白占领一块屏幕空间,看起来非常不爽







OK废话不多讲,開始讲技术吧,第一种方法,在代码设置:

  1. if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
  2. //透明状态栏
  3. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  4. //透明导航栏
  5. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
  6. }

直接调用上面2行代码能够透明,可是你会发现你的 view 跑到 actionbar 上面去了,非常明显 google 的意图是使你的 view 能够占领整个屏幕,然后 状态栏和导航栏 透明覆盖在上面非常明显这样不可行。

那有没有办法使你的 view 保持原来大小呢?

有,你须要在这个 activity 的 layout xml 文件加入两个属性

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:gravity="center_horizontal"
  5. android:fitsSystemWindows="true"
  6. android:clipToPadding="true"
  7. android:orientation="vertical" >

这样状态栏的背景就是你的 activity 的主背景,倘若actionbar 在,将会非常难看,如图:



事实证明,google 并没有提供一个比較好的解决方式,他的 透明状态栏与导航栏的应用局限于,全屏阅读文字或玩游戏那种情景,





另外一种方式,是是设置 theme 属性

  1. android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor"
  2. android:theme="@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor"
  3. android:theme="@android:style/Theme.Holo.NoActionBar.TranslucentDecor"

复制代码

假设你使用自定主题,仅仅需在在 values-19 文件加入下面属性:

  1. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
  2. <!-- API 19 theme customizations can go here. -->
  3. <item name="android:windowTranslucentStatus">true</item>
  4. <item name="android:windowTranslucentNavigation">true</item>
  5. </style>

复制代码

刚刚说了这个使用有局限性,只是好在有一个开源的东西

https://github.com/jgilfelt/SystemBarTint





使用这个开源库,必须开启透明标题栏

使用这个主题

  1. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
  2. <!-- API 19 theme customizations can go here. -->
  3. <item name="android:windowTranslucentStatus">true</item>
  4. <item name="android:windowTranslucentNavigation">true</item>
  5. </style>

或者在setContentView之前调用这个代码

  1. if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
  2. //透明状态栏
  3. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  4. //透明导航栏
  5. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
  6. }

Android 4.4 沉浸式透明状态栏与导航栏的更多相关文章

  1. Android 4.4 沉浸式透明状态栏

    原文链接:http://www.bkjia.com/Androidjc/913061.html 第一种方法 这里写代码片第一种方法,在代码设置: if(VERSION.SDK_INT >= VE ...

  2. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  3. 兼容 Android 4.4 透明状态栏与导航栏

    http://www.apkbus.com/Android-163388-1-1.html?_dsign=73d41229 android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加 ...

  4. Android一体式(沉浸式)状态栏的实现

    注:公司开发任务适配是在4.4版本之上进行,所以此适配仅在4.4之上进行测试. 1.主要使用了第三方的开源项目SystemBarTint,github:https://github.com/jgilf ...

  5. 【Android开发】通过 style 设置状态栏,导航栏等的颜色

    <style name="test"> <!--状态栏颜色--> <item name="colorPrimaryDark"> ...

  6. delphi 10.3.1 android沉浸式透明状态栏

    从10.2升级上来, 之前的沉浸状态栏在android手机上不透明了, 添加二个发布文件,remote path分别设为 res\values-v21和 res\values-v19 style.xm ...

  7. Android 5.0状态栏和导航栏

    Material Design推出之后,app中也開始沿用这样的风格 今天来说一下状态栏颜色设置,在4.4的时候推出了透明状态栏和导航栏.在不使用第三方库的情况下,4.4还是没有全然解决存在actio ...

  8. Android中的沉浸式状态栏效果

    无意间了解到沉浸式状态栏,感觉贼拉的高大上,于是就是试着去了解一下,就有了这篇文章.下面就来了解一下啥叫沉浸式状态栏.传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这一样就在一定 ...

  9. Android QMUI实战:沉浸式/适配状态栏

    近期研究QMUI换肤的实现,顺便分析了下QMUI的沉浸式. 网上已有很多关于QMUI实现页面沉浸式的文章,简而言之:复杂了. 本期,我们仅通过几行代码,即可完美实现页面沉浸式效果,并轻松匹配换肤的色彩 ...

随机推荐

  1. VC POST表单——登录验证新浪邮箱

    1.本机环境: Windows XP SP3.ADSL 2.开发工具: WildPackets OmniPeek V5.1.4 Visual C++ 6.0 IE6.0 FlexEdit V2.3.1 ...

  2. springMVC项目异步处理请求的错误Async support must be enabled on a servlet and for all filters involved in async

    从github上down下来一个项目,springMVC-chat.作者全是用的注解,也就是零配置.这可苦了我,经过千辛万苦,终于集成到如今的项目中有一点样子了,结果报出来以下的错误.红色部分.解决方 ...

  3. ssh远程登录报错REMOTE HOST IDENTIFICATION HAS CHANGED!解决方式及原因

    注意,文档中的ip和指纹已经替换为了ip.ip.ip.ip 和aa:... ,以免引起不必要的误会. icode@test:~/lab/dir/sadf$ ssh remote_name@ip.ip. ...

  4. iOS_动态插入或删除行

    终于效果图: 分MVC三层设计;自己定义的Cell有两种;一种是MainCell,由ModelArr提供数据源;还有一种是插入的cell,由代码创建,而且由另外一个数组供状态数据 数据源部分: wat ...

  5. SQL Server高可用——日志传送(4-1)——概论

    原文:SQL Server高可用--日志传送(4-1)--概论 本文作为学习总结,部分内容出自联机丛书及其他书籍 日志传送是什么? SQLServer 2012之前(2012出现了AlwaysOn), ...

  6. html 块状元素 行内元素 内联元素

    块状(Block)类型的元素的width默认为100%,而行内(Inline)类型的元素则是根据自身的内容及子元素来决定宽度. 块元素(block element) address - 地址 bloc ...

  7. Oracle实践--PL/SQL表分区的基础

    PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言.是对SQL的扩展.支 ...

  8. WinHEC(Windows硬件project产业创新峰会)将2015回归

    WinHEC这是Windows Hardware Engineering Cumminity,中国呼吁Windows硬件project产业创新峰会.将2015在早期的回报,2015年3月18日至19日 ...

  9. Node.js可以做些什么?

    就像 JavaScript 至client天生,Node.js 生于网络.Node.js 我们可以做更多的不是开发一个网络 站这么简单,采用 Node.js.您可以轻松地开发:  具有复杂逻辑的站点 ...

  10. 83. 从视图索引说Notes数据库(上)

    索引是数据库系统重要的feature,不管是传统的关系型数据库还是时兴的NoSQL数据库,它攸关查询性能,因而在设计数据库时须要细加考量.然而,Lotus Notes隐藏技术底层.以用户界面为导向.追 ...