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)

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

相关推荐
光头闪亮亮2 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮2 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(上)
android·sqlite·go
光头闪亮亮2 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
Ch_champion3 小时前
2018年之前的Android 项目上使用的技术点(及第三方库)
android
龚礼鹏3 小时前
RK Android16 wifi 投屏失败问题排查
android
晓梦林5 小时前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
ITmaster07315 小时前
告别 IDE?Android CLI 来了,开发进入 AI Agent 时代
android·ide·人工智能
aaajj6 小时前
【Android】获取设备音频
android
清泓y7 小时前
UE移动开发技术面试题
android·面试·ue5·ue4·游戏程序
DevRen7 小时前
Compose Snapshot 系统详解
android