概述
-
4.4(19 KITKAT) 以上有flag WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,如果这个flag被设置,View.SYSTEM_UI_FLAG_LAYOUT_STABLE 和 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.这两个flag会被自动添加到system UI visibility中。也就是说这时,是全屏的,内容会到状态栏下面。 这样设置后,状态栏半透明,4.4 是一层渐变的遮罩层,5.x 以上是一条半透明的遮罩层。
-
5.x(21 LOLLIPOP)自带方法window.setStatusBarColor(getResources().getColor(R.color.colorPrimary)),5.x才能直接设置状态栏颜色。这时页面不是全屏的,所以也不用设置fitSystemWindows(只在全屏下有效)。
使用
- 设置状态栏颜色,一种思路是5.0以上直接setStatusBarColor,4.4以上设为透明然后添加一个状态栏高度的自定义颜色的view。
Android 沉浸式状态栏完美解决方案 - 另一个思路,直接设为WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS全屏模式,给不想被状态栏遮挡的内容(例如toolBar)设置setFitsSystemWindows(true)(他的原理是给目标view设置paddingTop,且此时view设置的padding无效)。这种做法一般是可行的,但有的时候有问题。沉浸式状态栏实现及遇到的坑 ,有editText且它在底部时,为了不让键盘遮挡editText,这时把activity设为android:windowSoftInputMode="adjustResize"。这时与fitSystemWindows有冲突,导致意想不到的问题。(键盘弹出时setFitsSystemWindows(true)的那个布局会变高?我也没有搞懂)
可以选择手动给toolBar设置paddingTop.这时弹出键盘不再有与fitSystemWindows的问题。但是这时键盘还会遮挡editText。再用AndroidBug5497Workaround这个工具类解决遮挡问题。
参考
Android 沉浸状态栏
Android 沉浸式状态栏完美解决方案
Android软键盘挡住输入框问题的终极解决方案
沉浸式状态栏实现及遇到的坑
Android沉浸式状态栏(透明状态栏)最佳实现
android4.4以上沉浸式状态栏和导航栏实现以及Bar的其他管理
网友评论