fitsSystemWindows属性解析
作者:陆金龙
发表时间:2018-10-02 11:00
属性说明
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); }