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

如何将已设为透明的状态栏和导航栏恢复为纯色?

解决设置FLAG_LAYOUT_NO_LIMITS后无法恢复状态栏纯色的问题

问题出在你没有清除之前设置的FLAG_LAYOUT_NO_LIMITS标记。这个标记会让窗口布局不受系统状态栏和导航栏的限制,布局直接延伸到系统栏区域,此时你设置的statusBarColor会被覆盖,导致状态栏看起来还是透明的。

修正后的代码需要先清除这个标记,再设置颜色和UI可见性:

// 清除FLAG_LAYOUT_NO_LIMITS标记,恢复系统栏的布局限制
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)

// 设置状态栏和导航栏为白色
window.statusBarColor = ContextCompat.getColor(this, R.color.white)
window.navigationBarColor = ContextCompat.getColor(this, R.color.white)

// 设置浅色状态栏/导航栏文字(适配Android 10及以下)
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR

如果你的应用需要适配Android 11(API 30)及以上版本,SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR已经被废弃,建议改用WindowInsetsController的API:

// 清除FLAG_LAYOUT_NO_LIMITS标记
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)

// 设置状态栏和导航栏颜色
window.statusBarColor = ContextCompat.getColor(this, R.color.white)
window.navigationBarColor = ContextCompat.getColor(this, R.color.white)

// 适配Android 11+的浅色系统栏文字设置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    val insetsController = window.insetsController
    insetsController?.setSystemBarsAppearance(
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS or WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS or WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
    )
} else {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
}

这样操作后,状态栏和导航栏就能正常显示为白色了。

内容的提问来源于stack exchange,提问作者Amy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:10:28