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
相关产品推荐
相关产品推荐

