Android Q

时间:2019-09-16 11:21:56

标签: android kotlin-android-extensions android-10.0 android-dark-theme

我想在我的应用中实现android 10 dark主题,我有以下几种情况:

SYSTEM_DEFAULT, NIGHT_MODE, LIGHT_MODE

问题是当我从应用程序内部将主题从夜晚或灯光更改为system_default时,它无法理解系统是处于亮模式还是暗模式。因此主题将不会更新。

我已经尝试过Google的深色主题 https://developer.android.com/guide/topics/ui/look-and-feel/darktheme

并且实施配置仍然对我不利,因为如果用户将day更改为system default,而当系统默认值为day时,我不想重新创建活动。

反正我可以应付吗?

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)
        }

1 个答案:

答案 0 :(得分:1)

您无需在活动中设置主题并重新创建。如果您正确设置了应用主题,则会自动完成。

要在应用程序中使用Dark,应将DayNight主题扩展为您的应用程序主题。

<style name="AppTheme" parent="Theme.AppCompat.DayNight"> 

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

例如,如果要在黑暗模式下使用其他颜色,则应创建一个名为values-night的“ Android资源目录”,并使用一个名为colors.xml的资源文件

在colors.xml中,您可以为现有颜色之一设置不同的颜色十六进制。

例如:

values / colors.xml包含

<color name="myColor">#000000</color>

values-night / colors.xml包含

<color name="myColor">#FFFFFF</color>

编辑

您可以通过调用在应用中的暗/亮模式之间切换

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)