本文参考:薄荷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>
最终效果类似:
在应用或者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.xml
和style.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大小,具体在此不做讨论)