fitsSystemWindows属性解析

创建时间:2018/10/2 11:00:21
关键字:沉浸式标题栏 FLAG_TRANSLUCENT_STATUS FLAG_TRANSLUCENT_NAVIGATION

属性说明

fitsSystemWindows属性可以让view根据系统窗口来调整自己的布局;系统窗口包括系统状态栏、导航栏、输入法等,包括一些手机系统带有的底部虚拟按键。

android:fitsSystemWindows=”true” 会触发View的padding属性来给系统窗口留出空间,设置为false时可能出现Toolbar与状态栏重叠的情况

这个属性可以给任何view设置,只要设置了这个属性,此view的其他所有padding属性失效。

fitsSystemWindows属性的生效条件是设置了透明状态栏(StatusBar)或者透明导航栏(NavigationBar)。fitsSystemWindows只作用在Android4.4及以上的系统,因为4.4以下的系统StatusBar没有透明状态。

透明状态栏

4.4:设置android:windowTranslucateStatus属性,并且手动添加一个和状态栏高度等高的View。

5.0及以上:不设置android:windowTranslucateStatus属性,直接设置statusBarColor的色值。

应用示例

在不同Android版本下,App状态栏和不同版本中系统本身的状态栏的适配;兼容带有底部虚拟按键的手机系统。以下设置可以使状态栏与Toolbar颜色一致,实现沉浸式效果。

1.布局文件中设置android:fitsSystemWindows=”true” ,

2.初始化状态栏导航栏的透明效果,设置状态栏颜色:

protected void initMaterialStatusBar(@ColorInt int statusBarColor) {
    // SDK19 (Android 4.4)SDK20(Android 4.4W: KitKat for watches, snacks on the run)下设置透明状态栏和透明导航栏
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT &&Build.VERSION.SDK_INT<Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
    // 设置状态栏颜色
    StatusBarCompat.setStatusBarColor(this, statusBarColor);
}