提问人:Collin Franckena 提问时间:11/2/2023 更新时间:11/2/2023 访问量:42
Android Compose - 不会使用 Toggle 切换深色/浅色模式
android compose - wont switch dark/light mode with toggle
问:
对于学校项目,我需要实现深色/浅色模式的切换。我正在使用 Jetpack Compose。它切换 AppCompatDelegate 夜间模式。但它不会重新组合成黑暗主题。主题是使用 Material 3 主题构建器构建的。
用于切换暗模式的开关
SettingsSwitch(
icon = {
Icon(
imageVector = Icons.Outlined.DarkMode,
contentDescription = "DarkMode"
)
},
title = { Text(text = stringResource(id = R.string.setting_darkmode)) },
onCheckedChange = {
AppCompatDelegate.setDefaultNightMode(
if (it) MODE_NIGHT_YES else MODE_NIGHT_NO
)
println(AppCompatDelegate.getDefaultNightMode().toString())
},
state = stateSettingDarkMode,
enabled = !stateSettingSystemDarkMode.value
)
和 Theme.kt(没有 collorschemes)
@Composable
fun AppTheme(
useDarkTheme: Boolean = isNightMode(),
content: @Composable() () -> Unit
) {
val colors = if (!useDarkTheme) {
LightColors
} else {
DarkColors
}
MaterialTheme(
colorScheme = colors,
content = content
)
}
@Composable
private fun isNightMode() = when (AppCompatDelegate.getDefaultNightMode()) {
AppCompatDelegate.MODE_NIGHT_NO -> false
AppCompatDelegate.MODE_NIGHT_YES -> true
else -> isSystemInDarkTheme()
}
答:
0赞
Darian-Cătălin Cucer
11/2/2023
#1
SettingsSwitch(
icon = {
Icon(
imageVector = Icons.Outlined.DarkMode,
contentDescription = "DarkMode"
)
},
title = { Text(text = stringResource(id = R.string.setting_darkmode)) },
onCheckedChange = { checked ->
isDarkTheme.value = checked
AppCompatDelegate.setDefaultNightMode(
if (checked) MODE_NIGHT_YES else MODE_NIGHT_NO
)
},
state = isDarkTheme.value,
enabled = !stateSettingSystemDarkMode.value
)
@Composable
fun AppTheme(content: @Composable () -> Unit) {
val isDarkTheme = remember { mutableStateOf(isSystemInDarkTheme()) }
val colors = if (!isDarkTheme.value) {
LightColors
} else {
DarkColors
}
MaterialTheme(
colorScheme = colors,
content = content
)
}
下一个:无法在运行时动态更改原色
评论