2021-07-17

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根布局的背景色就是状态栏的颜色,不管是图片背景还是其他颜色背景,这样就完美达到想要的效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值