Как я могу программно определить, находится ли устройство Android в темном режиме?

Я пытаюсь поддержать тему Android Q Dark для моего приложения для Android и не могу понять, как импортировать различные ресурсы в зависимости от темы, в которой я сейчас нахожусь.

Я использую официальную тему DayNight для создания темных / светлых версий и для рисования. Очень просто указать XML, и он выберет правильное значение из значений или values-night в зависимости от того, что включено.

Я хотел сделать что-то подобное, где в зависимости от темы он будет загружать актив "priceTag_light.png" или "priceTag_dark.png".

val inputStream = if(darkIsEnabled) { 
                    assets.open("priceTag_dark.png")
                  } else {
                    assets.open("priceTag_light.png")
                  }

Есть ли способ получить этот флаг?

3 ответа

Хорошо, наконец, нашел решение, которое я искал. Как Deepak S. Gavkar указывает на параметр, который дает нам эту информацию о конфигурации. Итак, после небольшого поиска я нашел эту статью, в которой приведен пример метода, который отлично работал для того, что я хотел:

fun isDarkTheme(activity: Activity): Boolean {
        return activity.resources.configuration.uiMode and
                Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
    }

Сначала вы должны сделать это изменения в манифесте

<activity
    android:name=".MyActivity"
    android:configChanges="uiMode" />

затем на Конфигурацию изменил активность

val currentNightMode = configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
when (currentNightMode) {
    Configuration.UI_MODE_NIGHT_NO -> {} // Night mode is not active, we're using the light theme
    Configuration.UI_MODE_NIGHT_YES -> {} // Night mode is active, we're using dark theme
}

Используйте следующий код:

      boolean isDarkThemeOn = (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)  == Configuration.UI_MODE_NIGHT_YES;
Другие вопросы по тегам