系统UI主计长不会设置状态栏颜色 - 喷气背包撰写伴奏



我不确定何时或我改变了什么,但突然间systemUiController已经停止影响我的应用程序中的状态栏颜色。对于上下文,我使用伴奏Insets库与系统UI控制器相结合,以摆脱状态和导航栏,这是工作良好,直到一个或两个构建之前,现在它只工作在导航/手势栏。

我通过将所有可组合组件放入ProvideWindowInsets中,并将工具条颜色设置为透明来实现这一点。由于某些原因,这只适用于导航栏。

为了调试,我已经剥离了我的应用程序,除了mainActivity的onCreate中的setContent,包括所有的服务,并暂时删除了setContent中的所有内容,但一个空的主题提供商。

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
val systemUiController = rememberSystemUiController()
val useDarkIcons = !isSystemInDarkTheme()
SideEffect {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons
)
}
MicCheckTheme {
ProvideWindowInsets() {

}
}
}
}

当我运行这个,只有导航栏是透明的。我相信这不是Insets库的错,因为当状态栏保留其颜色时,应用程序内容在栏下,因此Insets按预期工作。

对于进一步的上下文,我使用一个MainActivity继承了ComponentActivity与Material3, Compose 1.2。x和伴奏的0.24.9-beta,尽管我尝试了许多不同的版本来调试它,但没有一个成功。我甚至创建了一个新的测试应用程序项目,并从伴奏github中粘贴了Insets + SystemUIController示例应用程序,即使这样也不起作用。

请帮帮我!谢谢。

这是因为在Material3中compose Theme。Kt覆盖系统控制器的更改如下:

val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
(view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb()
ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme
}
}

事实上,你不需要systemucontrollerlibrary来更新系统栏

。您可以直接使用上述代码从主题。

注意:viewpat . getwindowinsetscontroller (view)现在已被弃用。您应该使用WindowCompat。getInsetsController(窗口视图)

是工作,可以设置窗口。statusBarColor是Transparent, isappearance elightstatusbars是!darkTheme。这就完成了沉浸式体验。你只需要设置DemoTheme(darkTheme),

最新更新