首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Jetpack Compose + Material 3中更改状态栏颜色

如何在Jetpack Compose + Material 3中更改状态栏颜色
EN

Stack Overflow用户
提问于 2022-11-10 07:32:06
回答 3查看 93关注 0票数 1

我正在学习developer.google的主题教程。我正在尝试将应用程序迁移到Mat。3修改状态栏的颜色,使其与背景色相匹配。

  • 在添加android:statusBarColorandroid:windowLightStatusBar之后,没有什么变化。
  • 我注意到,在应用程序加载的最初时刻,状态栏确实和我预期的一样,但是过了一会儿,它就变得错误了。

以前:https://i.stack.imgur.com/i43cL.png

后:https://i.stack.imgur.com/kMwaP.png

我试过的是:

代码语言:javascript
运行
复制
// res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="Theme.Superheroes" parent="android:Theme.Material.Light.NoActionBar">
        <item name="android:statusBarColor">@color/background_light</item>
        <item name="android:windowLightStatusBar">true</item>
        <item name="android:windowBackground">@color/background_light</item>
    </style>
</resources>
代码语言:javascript
运行
复制
// res/values-night/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="Theme.Superheroes" parent="android:Theme.Material.NoActionBar">
        <item name="android:statusBarColor">@color/background_dark</item>
        <item name="android:windowLightStatusBar">false</item>
        <item name="android:windowBackground">@color/background_dark</item>
    </style>
</resources>
EN

回答 3

Stack Overflow用户

发布于 2022-11-10 09:27:27

在Jetpack中,最简单的是使用伴奏系统UI控制器。

将此添加到您的依赖项中:implementation "com.google.accompanist:accompanist-systemuicontroller:0.27.0"

然后,在您的MainActivity中:

代码语言:javascript
运行
复制
setContent {
            MyTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    val systemUiController = rememberSystemUiController()

                    SideEffect {
                        systemUiController.setStatusBarColor(
                            color = Color(0xff655D8A),
                        )
                    }
                }
            }
        }

资料来源和细节在这里。

票数 2
EN

Stack Overflow用户

发布于 2022-11-10 14:35:34

撰写示例项目Jetchat通过xml主题实现了这一点。

一定要像在不同的themes.xml文件中一样覆盖所有的android版本,否则在特定版本上会有一些奇怪的行为。

票数 1
EN

Stack Overflow用户

发布于 2022-11-10 14:08:04

另一种在不添加依赖项的情况下更改它的方法是@2801938中提到的ui.theme/Theme.kt

代码语言:javascript
运行
复制
@Composable
fun YourAppTheme(darkTheme...) {
    ...
    val view = LocalView.current
    if (!view.isInEditMode) {
        SideEffect {
            val window = (view.context as Activity).window
            window.statusBarColor = colorScheme.primary.toArgb()
            WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme
        }
    }
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74385502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档