[android]状态栏/虚拟按钮透明,沉浸

本文参考:薄荷app的toolbar适配方案
只考虑安卓4.4及以上的版本

介绍几个概念:
<item name="android:windowTranslucentStatus">true</item> 设置状态栏透明,并且布局可以侵入到状态栏(4.4之后才有)
<item name="android:windowTranslucentNavigation">false</item>设置虚拟按键透明,并且布局可以侵入到虚拟按键,(5.0之后才有)
注:5.0之后设置第一个,并不会显示透明,而是半透明状态,这是需要指定状态栏的颜色为透明:
<item name="android:statusBarColor">@android:color/transparent</item>
最终效果类似:

20160812151810177.png

在应用或者activity的主题中添加以上以上两个item,那么布局就可以侵入到状态栏/虚拟按键。这时状态栏/虚拟按键和布局是叠加的,可能会造成,状态栏/虚拟按键遮挡了布局的内容。这时需要用到另外一个属性
android:fitsSystemWindows=true :自动为控件添加一个状态栏高度的padding(需要添加到根View才起作用)

如果不能添加到根view的话,可以变通一下,手动给控件添加一个paddingTop,大小为0dp(4.4之前)或者25dp(4.4之后)(源码中statusBar的高度)

具体做法:
1、在values文件夹下,新建两个文件夹values-v19(对应4.4)和values-v21(对应5.0)
2、values-v19下新建两个xml文件:dimen.xmlstyle.xml
dimen.xml文件内容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="toolbar_pading_top">25dp</dimen>
</resources>

style.xml文件内容:

<style name="xxx"  parent="xxx">
       ...
        <!--设置状态栏透明-->
        <item name="android:windowTranslucentStatus">true</item>
    </style>

3、在values-v21下新建一个style.xml文件
内容:

<style name="xxx"  parent="xxx">      
          ...
        <!--设置状态栏透明-->
        <item name="android:windowTranslucentStatus">true</item>
        <!--设置虚拟按钮透明-->
        <item name="android:windowTranslucentNavigation">true</item>
        <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

4、在布局文件的根view中使用android:paddingTop="@dimen/toolbar_pading_top"(虚拟按键因为可能有,可能无,所以要在代码中判断后才能设置padding大小,具体在此不做讨论)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容