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

setSystemUiVisibility与SYSTEM_UI_FLAG_LIGHT_STATUS_BAR已废弃,求替代方案?

替换废弃的setSystemUiVisibility和SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

嘿,我来帮你搞定这个废弃API的替换问题!从Android 11(API 30)开始,setSystemUiVisibility和相关的SYSTEM_UI_FLAG_*常量被正式废弃,官方推荐用WindowInsetsController来替代。下面是你两段代码的精准等效实现:


代码1的等效实现(设置浅色状态栏文字)

原来的代码是让状态栏图标/文字变为深色(适配浅色状态栏背景),用新API的话,我们通过WindowInsetsController的setSystemBarsAppearance方法来实现:

Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    WindowInsetsController insetsController = window.getInsetsController();
    // 设置浅色状态栏(图标/文字为深色)
    insetsController.setSystemBarsAppearance(
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
    );
} else {
    // 兼容API 23-29的低版本设备
    View decorView = window.getDecorView();
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

这里的逻辑很直观:第一个参数是要启用的外观属性,第二个参数是掩码(告诉系统我们要修改哪一项属性)。


代码2的等效实现(清除所有系统UI标志)

原来的decor.setSystemUiVisibility(0)是清除之前设置的所有系统UI可见性、外观修改,恢复默认状态。用新API的话,我们需要同时清除外观修改并恢复系统栏的默认可见性:

Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    WindowInsetsController insetsController = window.getInsetsController();
    // 清除所有状态栏、导航栏的外观修改
    insetsController.setSystemBarsAppearance(0, 
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS | 
        WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
    );
    // 恢复系统栏的默认可见状态(如果之前有隐藏操作的话)
    insetsController.show(WindowInsets.Type.systemBars());
} else {
    // 兼容低版本设备
    View decorView = window.getDecorView();
    decorView.setSystemUiVisibility(0);
}

如果之前只修改过状态栏外观,也可以只传APPEARANCE_LIGHT_STATUS_BARS作为掩码,不过把导航栏的标志也加上会更全面,避免残留其他修改。


另外补充个小细节:如果是用Kotlin开发,代码会更简洁,比如设置浅色状态栏的代码可以写成:

window.insetsController?.apply {
    setSystemBarsAppearance(
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:47:30