Как я могу программно определить, находится ли устройство 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;