Kotlin中沉浸式状态栏显示布局

方法一

工具类

Kotlin 复制代码
class SetSystemBars {
    companion object{
        fun setupSystemBars(activity: Activity,view: View) {
            // 沉浸式状态栏配置
            WindowCompat.setDecorFitsSystemWindows(activity.window, false)
            activity.window.statusBarColor = Color.TRANSPARENT
            val insetsListener = OnApplyWindowInsetsListener { view, insets ->
                val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
                view.updatePadding(
//                top = systemBars.top,    // 顶部留出状态栏空间
                    bottom = systemBars.bottom,
                    left = systemBars.left,
                    right = systemBars.right
                )
                insets
            }
            ViewCompat.setOnApplyWindowInsetsListener(view, insetsListener)
        }
        fun setupSystemBars2(activity: Activity) {
            (activity as AppCompatActivity).enableEdgeToEdge(
                SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
                SystemBarStyle.auto(DefaultLightScrim, DefaultDarkScrim))
        }
    }
}

使用

Kotlin 复制代码
//onCreate方法中setContentView下调用
SetSystemBars.setupSystemBars(this,findViewById(R.id.ll_content))//ll_content是Activity的根布局id

方法二

java 复制代码
//activity的onCreate方法中调用
if (supportActionBar != null) {
            supportActionBar!!.hide() // 隐藏 ActionBar
        }
        window.apply {
            // 清除默认标志
            clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            // 设置状态栏透明
            statusBarColor = Color.TRANSPARENT
            // 让布局延伸到系统栏区域
            decorView.systemUiVisibility = (
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    )
        }
        val insetsListener = OnApplyWindowInsetsListener { view, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            view.updatePadding(
//                top = systemBars.top,    // 顶部留出状态栏空间
                bottom = systemBars.bottom,
                left = systemBars.left,
                right = systemBars.right
            )
            insets
        }
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.ll_content), insetsListener)

说明:两种方法都可实现沉浸式状态栏显示布局,并且布局不会被软键盘遮挡

相关推荐
张小姐的猫10 小时前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
朱涛的自习室13 小时前
212 个需求、22 万行代码:Agent 接管开源项目的 19 天
android·前端·人工智能
灿飞18 小时前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin
传奇开心果18 小时前
【Flutter踩坑排雷】第3课:const 误用坑|const 错误使用引发 UI 异常与性能损耗
android·flutter
哲鲤18 小时前
AOSP思绎|Android 多媒体:一段视频为什么需要这么多服务
android
阿杰m18 小时前
Android源码第三章:Handler、Looper 与 MessageQueue——一条消息如何入队、唤醒并执行
android
海雅达手持终端PDA21 小时前
巡线、深井、爆管抢修与极寒水网的硬件矩阵怎么配?海雅达水务巡检终端PDA选型指南
android·物联网·5g·集成测试·能源·政务
恋猫de小郭1 天前
Flutter 开始支持 Jetpack Compose Platform View
android·前端·flutter
三少爷的鞋1 天前
Android 架构七条铁律:架构师真正设计的不是代码,而是秩序
android
xiangxiongfly9152 天前
Android GsonFactory总结
android·gson·gsonfactory