You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Kotlin)开发中如何移除应用底部的灰色半透明背景?

Android(Kotlin)开发中如何移除应用底部的灰色半透明背景?

兄弟,我懂你刚学Kotlin做Todo应用想搞全屏的心情!既然已经搞定顶部状态栏了,那底部那层半透明的灰色背景,其实就是系统导航栏没完全处理好导致的,给你几个亲测有效的实操方法,都是我之前踩坑总结的:

一、Android 11+ 推荐用新的WindowInsetsController方法(更规范)

这是官方现在主推的方式,代码清晰还不容易出问题:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // 关键:让布局内容延伸到系统栏的区域,不再给系统栏留单独空间
    window.setDecorFitsSystemWindows(false)
    val controller = window.insetsController
    if (controller != null) {
        // 同时隐藏顶部状态栏和底部导航栏
        controller.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
        // 设置导航栏隐藏后,用户滑动屏幕边缘会临时显示,松手后自动隐藏(按需开启,不想让用户唤起就去掉这行)
        controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        // 彻底去掉导航栏的半透明灰色背景,设为完全透明
        window.navigationBarColor = Color.TRANSPARENT
    }
}

这里setDecorFitsSystemWindows(false)是核心,它会让你的布局直接占满整个屏幕,再配合导航栏透明+隐藏,半灰色背景自然就没了。

二、适配Android 10及以下的兼容方案

如果你的应用需要覆盖旧版本系统,就用这套旧的系统UI可见性标记方法:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // 组合标记实现全屏+沉浸式隐藏导航栏
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
    // 把导航栏和状态栏都设为透明,干掉半灰背景
    window.navigationBarColor = Color.TRANSPARENT
    window.statusBarColor = Color.TRANSPARENT
}

SYSTEM_UI_FLAG_IMMERSIVE_STICKY的作用和新方法里的行为一致,都是让导航栏临时唤起后自动隐藏,避免一直占着屏幕空间。

三、如果用Jetpack Compose开发的话

要是你的Todo应用是用Compose写的,操作更简单:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 同样先关闭系统栏的自动适配,让布局延伸全屏
    WindowCompat.setDecorFitsSystemWindows(window, false)
    setContent {
        TodoAppTheme {
            // 你的Compose布局,比如用fillMaxSize占满屏幕
            Box(modifier = Modifier.fillMaxSize()) {
                // ... 这里放你的Todo列表和其他控件
            }
        }
    }
}

要是担心临时唤起导航栏时挡住内容,还可以给布局加个导航栏内边距的适配:

Box(
    modifier = Modifier
        .fillMaxSize()
        .padding(WindowInsets.navigationBars.asPaddingValues())
) {
    // 布局内容
}

最后提个小建议:最好用真实设备测试,模拟器有时候会有显示偏差,确保效果符合预期~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:13:10