Android - Как определить, включен ли ночной режим при использовании AppCompatDelegate.MODE_NIGHT_AUTO
Я использую Androids, встроенный в функциональность дневного/ночного режима, и я хотел бы добавить опцию в мое приложение для AppCompatDelegate.MODE_NIGHT_AUTO
У меня проблема, потому что мое приложение требует, чтобы определенные вещи были окрашены программно, и я не могу понять, как проверить, считает ли приложение себя в ночном или дневном режиме. Без этого я не могу установить флаг для выбора правильных цветов.
Вызов AppCompatDelegate.getDefaultNightMode()
просто возвращает AppCompatDelegate.MODE_NIGHT_AUTO, который бесполезен.
Я не вижу ничего другого, что скажет мне, но должно быть что-то?
Ответы
Ответ 1
int nightModeFlags =
getContext().getResources().getConfiguration().uiMode &
Configuration.UI_MODE_NIGHT_MASK;
switch (nightModeFlags) {
case Configuration.UI_MODE_NIGHT_YES:
doStuff();
break;
case Configuration.UI_MODE_NIGHT_NO:
doStuff();
break;
case Configuration.UI_MODE_NIGHT_UNDEFINED:
doStuff();
break;
}
Ответ 2
Если вы разработчик Kotlin, вы можете использовать приведенный ниже код, чтобы судить о темном режиме.
val mode = context?.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)
when (mode) {
Configuration.UI_MODE_NIGHT_YES -> {}
Configuration.UI_MODE_NIGHT_NO -> {}
Configuration.UI_MODE_NIGHT_UNDEFINED -> {}
}
Подробнее о режиме темной темы
https://github.com/googlesamples/android-DarkTheme/
Ответ 3
Побитовый оператор в Java (который используется в ответе @ephemient) отличается в kotlin, поэтому код не может быть легко конвертируемым для начинающих. Вот версия kotlin на всякий случай:
private fun isUsingNightModeResources(): Boolean {
return when (resources.configuration.uiMode and
Configuration.UI_MODE_NIGHT_MASK) {
Configuration.UI_MODE_NIGHT_YES -> true
Configuration.UI_MODE_NIGHT_NO -> false
Configuration.UI_MODE_NIGHT_UNDEFINED -> false
else -> false
}
}