美文网首页
借助WindowInsetsControllerCompat,轻

借助WindowInsetsControllerCompat,轻

作者: 吴小亮的技术小站 | 来源:发表于2023-01-11 10:16 被阅读0次

最近在提测版本时,测试发现一个奇怪的现象,在一个状态栏透明背景,文字是亮色的页面下,跳转登录,当前界面的状态栏会突然变成白底黑字,然后在跳转过去。

一排查下来,发现状态栏会变成白底黑字,是因为登录时会唤起一个透明的中间页面,执行一键登录的逻辑,而这个透明页面,自然是默认的黑底白字。知道了原因,那就开始动手解决吧。

因为业务需要,跳转之前的页面的状态栏不能修改,那就只能修改透明的中间页面,让其可以适配上一个页面的状态栏配置,这里因为我之前已经做了activity任务栈的维护,详见下面的代码:

        application.registerActivityLifecycleCallbacks(object : AbsActivityLifecycleCallback() {
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
                super.onActivityCreated(activity, savedInstanceState)

                addActivity(activity)
            }

            override fun onActivityDestroyed(activity: Activity) {
                super.onActivityDestroyed(activity)

                removeActivity(activity)
            }
        })

这样我就能拿到上一个页面的Activity实例,现在问题变成了如何获取其状态栏背景。一开始我打算根据设置状态栏背景的方法getDecorView().setSystemUiVisibility(visibility),反过来找一下getSystemUiVisibility的方法,可惜的是并没有这样的方法。之后想起来之前用过WindowInset解决app嵌入h5页面,唤起软键盘时界面没有正确显示的问题,当时只用了WindowInsetCompat,
而官方在api 30引入了WindowInsetsController,用于替代setSystemUIVisibilty,另外在core-ktx的1.5.0版本,新添加了WindowInsetsControllerCompat,用于向下兼容。

查看了一下api,WindowInsetsControllerCompat有一个isAppearanceLightStatusBars()方法,
返回status bar的foreground是不是light,注意这里返回true说明是亮色底,也就是白底黑字,文字颜色是黑色,要获取文字颜色的需要对返回值取反。这样我们就可以通过这个方法来适配页面的状态栏背景。

到此问题就解决了,不过在排查过程中,我发现公司的状态栏管理的工具类的逻辑非常乱,毕竟状态栏这块经历了4.4时期第三方rom支持修改,5.0官方支持,后续新增了新的功能,现在通过WindowInsetsController,控制状态栏,底部栏,软键盘这些控件变得更加简单了,大家赶紧学起来

相关文章

  • 如何借助外力,实现园区轻资产转型?

    常言道:工欲善其事必先利其器,对于产业地产来说,这个“器”是销售去化的重要支撑。近几年来,随着产业地产的发展、产业...

  • Ghost, Micro Blog, GCP

    Tumblr, Lofter, 和近来流行起来的Ghost, 博客或者是轻博客的发展趋势是更多的社交化成分。借助G...

  • 流量爆发的事件营销

    事件营销:“轻、快、爆”的流量爆发 事件营销简单来说就是借助用户关注的事件热点获取流量。这种营销方式一直很受企业市...

  • 借助神力

    开场两问: 1、你相信有神存在吗? 2、神到底是什么? 进入过往体验: 你有没有一种体会,只要你跟着心走,相信直觉...

  • 借助监控

    奶奶腿脚不便,走路需要用助行器。平时是小姑姑在照顾她。可是小姑姑偶尔有事不在家,没办法24小时看护。前几天...

  • Mr.二狗 微信阅读APP-初体验

    微信阅读-初体验 1.独立APP 2.主流渠道借助微信 3.APP量级轻 4.页面简洁,主题鲜明!进入界面,引导用...

  • 相爱也要独立

    相爱是一把伞,你应该安心在对方撑伞的时候借助他躲避暴雨狂风,不用慌张忐忑,也不要因此退让软弱,自贱自轻。你...

  • 随笔

    悠悠岁月,可以怎样回眸?借助照片,借助视频,借助文字,借助记忆。哪些可以记起,记起的又有着怎样的 关系。记起...

  • 拥抱kotlin:利用kotlin实现单例模式

    java的单例模式几种写法都已经很熟悉了,但转到kt时如果用java写法实现倒显得怪异了,有的可以借助kt的约定轻...

  • 七律.吟柳咏春

    七律.吟柳咏春 文.俞金泉.新韵 河边翠柳轻摇曳, 借助春风巧手裁。 露雨晶珠妆饰挂, 阳光闪烁篦情怀。 地席色绿...

网友评论

      本文标题:借助WindowInsetsControllerCompat,轻

      本文链接:https://www.haomeiwen.com/subject/itjvcdtx.html