注意:这并不是 4.4- 下的沉浸状态栏解决方案,目前 4.4- 没有 API 实现透明或沉浸状态栏,仅作为一次日常记录。
从 4.4 (API 19) 开始,可以通过设置 Window Flag 或对 Activity 的根布局设置 fitsSystemWindows 属性来透明 / 沉浸状态栏。大多数情况下,透明任务栏会使布局往上顶,而增加占位符不是在什么时候都有用的 (比如实现状态栏到标题栏范围内的高斯模糊或统一非纯色背景。效果可以参照 iOS 的标题栏)。
可以理解成这种效果:
这是一个自定义 View,上边空出状态栏的高度,内容置底。这在 4.4+ 上非常好用,不用担心其它沉浸方法的绝大多数坑。但是如果你的 APP 需要兼容 4.4-,上边预留的位置会顶下来,造成标题栏过高的效果。
就像这样:
此时可以在你的自定义 View 中,判断 API 版本来缩小整个 View 的高度。假设使用的 ViewGroup 是 RelativeLayout:
// 针对 4.4- 的沉浸标题栏处理 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.height = (int) (50 * getResources().getDisplayMetrics().density + 0.5f); lp.width = ViewGroup.LayoutParams.MATCH_PARENT; rlTitleBar.setLayoutParams(lp); }
50dp 是我的 View 所支持的最小高度。实际使用时,需按自己的需要进行调整。
最终在 4.2 上的效果: