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)

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

相关推荐
朱涛的自习室6 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
墨天梦7 小时前
D19_系统分享与文件URI
gitee·kotlin
应用市场12 小时前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
一铭1119913 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
geats人山人海13 小时前
java 7异常
android·java·开发语言
2601_9620710014 小时前
Kimi K3 vs DeepSeek V4-Pro实测对比:2026年同一入口十道题,耗时与token消耗差在哪
android·java·数据库
右手吉他15 小时前
高通平台IA APN问题分析之二
android·物联网
夜雪一千16 小时前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
不浪费一个字节16 小时前
一个纯 Python 实现的 APK 解析与设备操控工具箱
android
itmigrate16 小时前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php