Android4.4以后的版本起,android系统开始支持沉浸式的状态栏样式,现在也有很多主流APP都已经支持了,像腾讯QQ,QQ空间,天天动听等,个人也是比较喜欢这样样式的效果。
那具体在开发中,我们怎么实现呢?首先,我们把状态栏和导航栏透明化,这个需要对当前系统版本进行判断,只有4.4及以上版本才支持,具体代码如下,我们只需要在onCreate的时候加载就行:
private void init(){
//判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
这样处理后,效果的确实现了,但是会发现布局也移动到顶部的状态栏,这个肯定不是我们想要的效果,这个时候我们可以在根布局添加两行属性即可:
android:fitsSystemWindows="true"
android:clipToPadding="true"
这个时候效果基本上就实现了,但是细心的朋友还会发现一个问题,那就是这个时候的状态栏颜色和根布局颜色是一样的,而其实我们的最终想要的效果是状态栏的颜色和布局中顶部的第一个控件的颜色相同即可,所以我们还需要改一下设置,把刚刚的那两个属性添加到顶部第一个控件上,而不是放到根布局中,最终就可以实现我们想要的沉浸式布局的效果,并且是根据我们布局中的第一个控件的背景进行沉浸的。另外,还有一个优化技巧,那就是我们每次都需要在代码中判断并设置状态栏透明是比较繁琐的,其实,我们可以添加一个value-19属性,在xml文件中进行设置,那样就不需要在每个activity代码中配置了,具体配置是在res下面创建一个values-v19文件夹,然后再在里面创建一个styles.xml文件,里面代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name = "AppTheme" parent = "Base.AppTheme">
<!--这两句用于状态栏透明 实现沉浸式状态栏-->
<item name = "android:windowTranslucentStatus">true</item>
<item name = "android:windowTranslucentNavigation">false</item>
</style>
</resources>