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

decorView.systemUiVisibility已废弃 如何正确替换该API

旧代码逻辑解析

你贴的两段旧代码是Android旧版本实现沉浸式布局的典型写法,各flag作用如下:

  • 第一段配置是沉浸式布局的基础:
    • View.SYSTEM_UI_FLAG_LAYOUT_STABLE:固定系统栏(状态栏、导航栏)的布局占位边界,避免系统栏显隐时触发应用内容的布局跳动
    • View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:允许应用内容区域延伸绘制到状态栏下方,让状态栏悬浮在应用内容上层,实现沉浸式视觉效果
  • 第二段配置是追加浅色状态栏模式:在原有UI配置基础上,将状态栏的文字、图标切换为深色,适配浅色的状态栏/页面顶部背景,避免浅色背景下白色状态栏元素看不清的问题。
废弃API的适配写法

View.systemUiVisibility 相关控制位从Android 11(API 30)开始被官方标记为废弃,新的系统UI控制统一通过WindowInsetsController体系实现,推荐使用AndroidX提供的兼容类WindowInsetsControllerCompat实现全版本适配,不需要手动判断SDK版本。

第一步:替换沉浸式基础配置

删除原来给systemUiVisibility赋值SYSTEM_UI_FLAG_LAYOUT_STABLE和SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN的代码,在Activity的onCreate方法中添加如下配置:

// 等价于旧版两个LAYOUT flag的组合效果:让内容延伸到系统栏下方
window.setDecorFitsSystemWindows(false)
// 如果需要透明状态栏,追加这行即可
window.statusBarColor = android.graphics.Color.TRANSPARENT

该配置在AppCompatActivity下有完整的低版本兼容实现,WindowInsetsControllerCompat会自动处理不同系统版本的逻辑差异。

第二步:替换浅色状态栏配置

删除原来追加SYSTEM_UI_FLAG_LIGHT_STATUS_BAR的代码,通过WindowInsetsControllerCompat设置浅色状态栏状态:

val insetsController = WindowInsetsControllerCompat(window, window.decorView)
// 开启浅色状态栏:状态栏文字、图标变为深色
insetsController.isAppearanceLightStatusBars = true
// 如果需要同时适配浅色导航栏(导航栏图标变深色),追加对应配置即可
// insetsController.isAppearanceLightNavigationBars = true

如果后续需要关闭浅色状态栏,把isAppearanceLightStatusBars设为false即可,兼容类会自动在低版本系统上回退到旧的systemUiVisibility位操作逻辑,行为和旧代码完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:39:42