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

Android R如何实现布局置于状态栏下方?旧废弃API替代方案

Android R 实现布局延伸至状态栏下方方案

Android R(API 30)及以上版本中,原systemUiVisibility属性已被官方废弃,可使用WindowInsetsController相关API实现同等效果,具体实现如下:

核心实现代码

Kotlin 版本

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    // 允许布局延伸至系统状态栏区域,等价于旧版两个FLAG的组合效果
    window.setDecorFitsSystemWindows(false)
    // 可选配置:如需状态栏文字/图标显示为深色,添加以下代码
    window.insetsController?.setSystemBarsAppearance(
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
        WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
    )
} else {
    // 兼容Android 11以下版本,保留原有实现
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
// 设置状态栏为透明色,否则无法看到下层布局内容
window.statusBarColor = Color.TRANSPARENT

Java 版本

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    window.setDecorFitsSystemWindows(false);
    // 可选配置:状态栏文字/图标显示为深色
    WindowInsetsController controller = window.getInsetsController();
    if (controller != null) {
        controller.setSystemBarsAppearance(
                WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
                WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
        );
    }
} else {
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
window.setStatusBarColor(Color.TRANSPARENT);

注意事项

  • 若不需要调整状态栏文字/图标颜色,可直接删除对应setSystemBarsAppearance相关代码
  • 若存在布局内容被状态栏遮挡的情况,可给需要避开状态栏的控件添加android:fitsSystemWindows="true"属性,系统会自动为控件添加对应高度的顶部内边距
  • 上述代码建议在Activity的onCreate方法中执行,调用时机和旧方案一致

效果参考

旧方案实现效果参考

内容的提问来源于stack exchange,提问作者Jéwôm'

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:57:02