Android Q 中的深色主题配置更改
Dark theme configuration change in Android Q
我想在我的应用中实现 android 10 个深色主题,我有以下情况:
SYSTEM_DEFAULT, NIGHT_MODE, LIGHT_MODE
问题是当我从应用程序内部将主题从夜间或灯光更改为 system_default 时,它无法理解系统是处于灯光模式还是黑暗模式。所以主题不会更新。
我试过 google 的深色主题
https://developer.android.com/guide/topics/ui/look-and-feel/darktheme
并且实施配置仍然对我不利,因为我不想重新创建我的 activity 如果用户将日期更改为系统默认值,而系统默认值是日。
有什么办法可以解决这个问题吗?
when(id) {
NIGHT - > theme = Theme.NIGHT_MODE
DAY - > theme = Theme.LIGHT_MODE
SYSTEM_DEFAULT - > theme = Theme.SYSTEM_DEFAULT
}
context ? .clearCachedDrawables()
activity ? .recreate()
}
编辑:
when (themeStatus) {
Theme.LIGHT_MODE ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Theme.NIGHT_MODE ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
Theme.SYSTEM_DEFAULT ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
}
您不需要在 activity 中设置主题并重新创建它。如果您已正确设置应用主题,它会自动完成。
要在您的应用中使用 Dark,您应该将 DayNight 主题扩展为您的应用主题。
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
或
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
例如,如果您想要在深色模式下使用不同的颜色,您应该创建一个名为 values-night 的 'Android resource directory' 以及一个名为 colors.xml
的资源文件
在 colors.xml 中,您可以为其中一种现有颜色设置不同的十六进制颜色。
例如:
values/colors.xml 包含
<color name="myColor">#000000</color>
values-night/colors.xml 包含
<color name="myColor">#FFFFFF</color>
编辑
您可以通过调用
在应用程序中切换Dark/light模式
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
或
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
或
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
我想在我的应用中实现 android 10 个深色主题,我有以下情况:
SYSTEM_DEFAULT, NIGHT_MODE, LIGHT_MODE
问题是当我从应用程序内部将主题从夜间或灯光更改为 system_default 时,它无法理解系统是处于灯光模式还是黑暗模式。所以主题不会更新。
我试过 google 的深色主题 https://developer.android.com/guide/topics/ui/look-and-feel/darktheme
并且实施配置仍然对我不利,因为我不想重新创建我的 activity 如果用户将日期更改为系统默认值,而系统默认值是日。
有什么办法可以解决这个问题吗?
when(id) {
NIGHT - > theme = Theme.NIGHT_MODE
DAY - > theme = Theme.LIGHT_MODE
SYSTEM_DEFAULT - > theme = Theme.SYSTEM_DEFAULT
}
context ? .clearCachedDrawables()
activity ? .recreate()
}
编辑:
when (themeStatus) {
Theme.LIGHT_MODE ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Theme.NIGHT_MODE ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
Theme.SYSTEM_DEFAULT ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
}
您不需要在 activity 中设置主题并重新创建它。如果您已正确设置应用主题,它会自动完成。
要在您的应用中使用 Dark,您应该将 DayNight 主题扩展为您的应用主题。
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
或
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
例如,如果您想要在深色模式下使用不同的颜色,您应该创建一个名为 values-night 的 'Android resource directory' 以及一个名为 colors.xml
的资源文件在 colors.xml 中,您可以为其中一种现有颜色设置不同的十六进制颜色。
例如:
values/colors.xml 包含
<color name="myColor">#000000</color>
values-night/colors.xml 包含
<color name="myColor">#FFFFFF</color>
编辑
您可以通过调用
在应用程序中切换Dark/light模式AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
或
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
或
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)