Я ищу, как переключить тему приложения,
- в настройках приложения, чтобы пользователь мог выбрать, использовать ночной режим или нет
userSettings.night_mode = [null | yes | no]
если пользователь не указывает, то go с настройками системы устройства, т.е. когда настройки системы переходят в ночной режим, приложение переходит в ночной режим; когда системные настройки изменяются на не ночной режим, приложение должно отображаться с не ночным режимом.
для # 1. Я считаю, что для изменения настроек приложения достаточно:
userSettings.night_mode?.let {
val nightMode = if(userSettings.night_mode == yes)
AppCompatDelegate.MODE_NIGHT_YES
else
AppCompatDelegate.MODE_NIGHT_NO
AppCompatDelegate.setDefaultNightMode(userSettings_night_mode)
}
и проверки, в каком режиме находится приложение в данный момент:
int currentNightMode = getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_MASK
Но для № 2 не нашли надежного способ для работы с системой, хотя есть один MODE_NIGHT_FOLLOW_SYSTEM
и может сделать
if (userSettings.night_mode == null) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
}
, который использует настройку ночного режима системы, чтобы определить, ночь это или нет. , но кажется за Крис Бейнс
Android Q onwards has a system night mode which can be enabled in the Settings app.
Android Pie also has a system night mode setting, but it is only surfaced in the device’s ‘developer options’.
For ease, I recommend treating Android Pie the same as previous versions of Android.
Так что для ОС до Android В, как сделать, чтобы ночной режим приложения соответствовал настройкам ночного режима системы? (может ли пользователь установить night mode
на этих устройствах с Android os до Q?)