下面介绍两种方式 改变状态栏的颜色 (顶部 和底部)
1、EdgeToEdge
代码如下
val statusBarLight = PrimaryLight.toArgb()
val statusBarDark = PrimaryDark.toArgb()
val navigationBarLight =PrimaryLight.toArgb()
val navigationBarDark = PrimaryDark.toArgb()
val context = LocalContext.current as ComponentActivity
DisposableEffect(darkTheme) {
context.enableEdgeToEdge(
statusBarStyle = if (!darkTheme) {
SystemBarStyle.light(
statusBarLight,
statusBarDark
)
} else {
SystemBarStyle.dark(
statusBarDark
)
},
navigationBarStyle = if(!darkTheme){
SystemBarStyle.light(
navigationBarLight,
navigationBarDark
)
} else {
SystemBarStyle.dark(navigationBarDark)
}
)
onDispose { }
}
2、Window
代码如下
val statusBarLight = PrimaryLight.toArgb()
val statusBarDark = PrimaryDark.toArgb()
val navigationBarLight =PrimaryLight.toArgb()
val navigationBarDark = PrimaryDark.toArgb()
val view = LocalView.current
DisposableEffect(darkTheme) {
val activity = view.context as Activity
activity.window.statusBarColor = if (darkTheme){statusBarDark} else {statusBarLight}
activity.window.navigationBarColor = if (darkTheme){navigationBarDark} else {navigationBarLight}
WindowCompat.getInsetsController(activity.window, activity.window.decorView).apply {
isAppearanceLightStatusBars = !darkTheme
isAppearanceLightNavigationBars = !darkTheme
}
onDispose { }
}
isDarkModel 可以使用 isSystemInDarkTheme() 获取,如果动态切换 夜间模式 可以使用Viewmodel 保存数据 view层监听数据来完成。