繁体   English   中英

SystemUIController 不会设置状态栏颜色 - Jetpack Compose Accompanist

[英]SystemUIController won't set status bar color - Jetpack Compose Accompanist

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

为此,我将所有可组合项放入 ProvideWindowInsets,并将条形 colors 设置为透明。 由于某种原因,这只适用于导航栏。

为了调试,除了 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 覆盖 systemuicontroller 更改如下:

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

事实上,您不需要systemuicontroller库来更新系统栏

. 您可以直接在 Material3 Compose 模板中使用 Theme.kt 中的上述代码。

注意: ViewCompat.getWindowInsetsController(view)现已弃用。 您应该使用WindowCompat.getInsetsController(window, view)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM