我正在学习developer.google的主题教程。我正在尝试将应用程序迁移到Mat。3修改状态栏的颜色,使其与背景色相匹配。
android:statusBarColor
和android:windowLightStatusBar
之后,没有什么变化。以前:https://i.stack.imgur.com/i43cL.png
后:https://i.stack.imgur.com/kMwaP.png
我试过的是:
// 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>
// 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>
发布于 2022-11-10 09:27:27
在Jetpack中,最简单的是使用伴奏系统UI控制器。
将此添加到您的依赖项中:implementation "com.google.accompanist:accompanist-systemuicontroller:0.27.0"
然后,在您的MainActivity中:
setContent {
MyTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
val systemUiController = rememberSystemUiController()
SideEffect {
systemUiController.setStatusBarColor(
color = Color(0xff655D8A),
)
}
}
}
}
发布于 2022-11-10 14:35:34
撰写示例项目Jetchat通过xml主题实现了这一点。
一定要像在不同的themes.xml
文件中一样覆盖所有的android版本,否则在特定版本上会有一些奇怪的行为。
发布于 2022-11-10 14:08:04
另一种在不添加依赖项的情况下更改它的方法是@2801938中提到的ui.theme/Theme.kt
:
@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
}
}
...
}
https://stackoverflow.com/questions/74385502
复制相似问题