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

ViewCompat.getWindowInsetsController已废弃,该使用何种替代方案?

解决Jetpack Compose中ViewCompat.getWindowInsetsController弃用警告的简便方法

升级Android Gradle插件至7.2.2后,Jetpack Compose项目默认的Theme.kt文件里的状态栏设置代码会触发ViewCompat.getWindowInsetsController is deprecated警告,问题出在这段默认实现:

val view = LocalView.current
if (!view.isInEditMode) {
    SideEffect {
        (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb()
        ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme // 触发弃用警告
    }
}

按照官方建议用WindowCompat.getInsetsController替代即可,无需忽略警告,修改后的代码如下:

val view = LocalView.current
if (!view.isInEditMode) {
    SideEffect {
        val activity = view.context as Activity
        val window = activity.window
        window.statusBarColor = colorScheme.primary.toArgb()
        // 替换为WindowCompat的API
        WindowCompat.getInsetsController(window, view)?.isAppearanceLightStatusBars = darkTheme
    }
}

这个改动逻辑和原代码完全一致:先获取当前Activity的Window,再把Window和View一起传给WindowCompat.getInsetsController,就能完成浅色状态栏的设置,完美消除弃用警告。

如果你的View可能处于非Activity环境(比如Dialog),可以额外加个类型判断避免强转崩溃,但默认Compose项目的Theme是在Activity中使用的,这个强转是安全的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:48:04