Проблема с строкой состояния / элементами управления в режиме DayNight, которая не всегда соответствует теме после воссоздания - PullRequest
0 голосов
/ 29 октября 2018

У меня возникли некоторые проблемы с тем, чтобы тема DayNight могла нормально играть после изменения предпочтений и вызова activity.recreate (). В зависимости от значения (и того, какой SDK я использую), я получаю несогласованные темы (значки темные на темном или светлые на светлом).

В моем PreferenceFragment у меня есть предпочтение, которое позволяет пользователю установить одно из трех значений: Light, Dark или Auto, которые соответствуют AppCompatDelegates MODE_NIGHT_NO, MODE_NIGHT_YES или MODE_NIGHT_AUTO, соответственно. Вот как выглядит реализация:

PreferenceFragment.kt

override fun onPreferenceChange(preference: Preference, value: Any): Boolean {
    setSummary(preference, value.toString())

    return when (preference.key) {
        themePreference.key -> consume {
            AppCompatDelegate.setDefaultNightMode(appSharedPreferences.string(R.string.preference_theme_key).toInt())
            activity?.recreate()
        }
    }
}

BaseActivity.kt

 override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(appSharedPreferences.string(R.string.preference_theme_key).toInt())

    super.onCreate(savedInstanceState)
}

Я также пробовал комбинации:

delegate.setLocalNightMode(appSharedPreferences.string(R.string.preference_theme_key).toInt())

и

AppCompatDelegate.setDefaultNightMode(appSharedPreferences.string(R.string.preference_theme_key).toInt()

безуспешно попали в разные места жизненного цикла действия / приложения.

В основном я вижу темные значки в темной строке состояния и несоответствия в переключателе приложений до P (тема «Ночь», но панель инструментов переключателя приложений отображается в виде светлой темы). Похоже, у меня нет проблем с темой элементов управления моего собственного приложения, таких как вкладки или текст, - это в основном в представлениях системы Android, таких как строка состояния и панель инструментов переключателя приложений).

Если я убью приложение и перезапущу, у меня не возникнет никаких проблем. Только после вызова Activity.recreate я вижу эти проблемы.

...