fitsSystemWindows那些事,备忘录,避坑!
关于fitsSystemWindows有效有两种方式。
第一种:颜色填充。
第二种图片背景填充。(这是一张花纹蓝底图片为背景)
第一种方式(通过xml配置)
在themes.xml里面。定义两个东东,一个是状态栏背景色透明,一个是手机有底部导航栏半透明,如下。
1、parent指的是默认主题,以你自己的为准。
<style name="home" parent="Theme.zhang.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
2、第二个配置android:windowTranslucentNavigation就是这三个小东西。
3、在AndroidManifest.xml文件引入主题。
<activity
android:name=".activity.HomeActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/home"/>
4、在layout代码里的根布局设置。
android:fitsSystemWindows="true"
第一种方式完成。
接下来讲解
第二种方式(代码设置,重点)
1、不用写themes.xml文件和配置theme。直接在activity中使用,在oncreate的super之后就行
MyStaBarUtil.setStatusBarColor(this, R.color.z000000) // 设置状态栏透明,相当于xml的第一步。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) // 设置导航栏半透明,相当于xml的第二步。
MyStaBarUtil.setLightStatusBar(this, false, false) // 状态栏的字体颜色(系统只能黑白),黑或者白。
2、在fragment使用,毕竟fragment依附Activity,也就相当于改变activity的,适用于ViewPager和frameLayout添加fragment的场景。
MyStaBarUtil.setStatusBarColor(requireActivity(), R.color.z000000)
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
MyStaBarUtil.setLightStatusBar(requireActivity(), false, false) // 毕竟状态栏的字体只能是黑色或者白色,根据自己的UI来设置就行了。
3,图片填充状态栏形式。
最好将根布局layout的background设置为图片形式,其他控件按UI图上色覆盖就行,三种方式都是在根布局写入
android:fitsSystemWindows="true"
**
结束
**
记住,我一直强调根布局,用根布局的背景填充状态栏最好,切记不要在textview或者imageview等非ViewGroup使用fitsSystemWindows=“true”。
使用一个layout做好再include进来才不会容易走样,include进来的layout根布局的背景色就是状态栏的颜色,不管是图片背景还是其他颜色背景,这样就完美达到想要的效果