android:theme=“@style/ThemeOverlay.AppCompat.Dark.ActionBar” />
上面代码在Android 4.4和Android 5.0+上面对比效果图如下:
由上面对比图我们可以看出来,在Android 4.4上面状态栏是全透明的,而在Android 5.0+上面状态栏是半透明的。
注:有些4.4的系统上面状态栏并不是全透明的,而是渐变的。
2.2-Android 5.0以上实现方式
上面已经实现了沉浸式状态栏的效果了,但是如果运行在Android 5.0以上的机器上面,会发现大部分手机会出现状态栏是半透明的。
也有些App在Android 5.0以上就是这种状态栏半透明的效果,比如QQ。但是有些产品和设计就是想统一风格,全部都实现全透明的状态栏。那怎么办呢?Android自5.0起,又为我们提供了设置状态栏颜色的API,我们可以自己设置状态栏的颜色。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
添加上述代码后再在Android 5.0+上运行看效果,状态栏已经变成全透明了,和上图Android 4.4效果一样的,这里就不再附图了。
2.3-Android 6.0以上设置状态栏字体颜色
大部分手机默认状态栏字体颜色是白色的,如果Toolbar或者界面头部的颜色较浅,那么状态栏上白色的字看不怎么清楚。 Android 6.0以后,我们可以使用代码将状态栏字体的颜色设置为黑色了,代码如下:
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
3-踩过的坑
本以为上面基本已经完美实现了沉浸式状态栏了,没想到测试的时候还是发现了一系列的坑。
3.1-软键盘弹出时Toolbar被顶上去了
如果在界面中有EditText或者其他输入框的话,会发现当软件盘弹出的时候Toolbar里面的内容都被顶上去了,如下图所示:
这是为什么呢?经研究发现原来是fitsSystemWindows属性搞的鬼。哪个View设置了fitsSystemWindows=true,这个View就会被软件盘顶上去。所以说,fitsSystemWindows不