PreferenceFragmentCompat не изменит цвет при изменении темы и воссоздании активности

Я использую PreferenceFragmentCompat для настроек, и когда я изменяю настройку темы с помощью ListPreference на темную тему и воссоздаю действие, текст остается темным и становится невидимым. Если я снова открою этот фрагмент, текст станет белым, но он вернется к черному цвету при изменении ориентации.

Вот мои стили:

     <style name = "AppThemeLight" parent = "Theme.AppCompat.Light.NoActionBar">
    <item name = "colorPrimary">@color/colorPrimary</item>
    <item name = "colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name = "colorAccent">@color/colorAccent</item>
    <item name = "preferenceTheme">@style/preferenceLight</item>

    <item name = "android:windowNoTitle">true</item>
    <item name = "android:windowActionBar">false</item>
    <item name = "windowActionModeOverlay">true</item>

    <item name = "android:textColorPrimary">@color/primaryText</item>
    <item name = "android:textColorSecondary">@color/secondaryText</item>

</style>

<style name = "AppThemeDark" parent = "Theme.AppCompat.NoActionBar">
    <item name = "colorPrimary">@color/colorPrimary</item>
    <item name = "colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name = "colorAccent">@color/colorAccent</item>
    <item name = "preferenceTheme">@style/preferenceDark</item>

    <item name = "android:windowNoTitle">true</item>
    <item name = "android:windowActionBar">false</item>
    <item name = "windowActionModeOverlay">true</item>

    <item name = "android:windowBackground">@color/primaryText</item>

    <item name = "android:textColorPrimary">@color/primaryTextDark</item>
    <item name = "android:textColorSecondary">@color/secondaryText</item>

</style>

<style name = "preferenceLight" parent = "PreferenceThemeOverlay.v14.Material">
    <item name = "android:textColor">@color/primaryText</item>
    <item name = "android:textColorPrimary">@color/primaryText</item>
    <item name = "android:textColorSecondary">@color/secondaryText</item>
</style>

<style name = "preferenceDark" parent = "PreferenceThemeOverlay.v14.Material">
    <item name = "android:textColor">@color/primaryTextDark</item>
    <item name = "android:textColorPrimary">@color/primaryTextDark</item>
    <item name = "android:textColorSecondary">@color/secondaryText</item>
</style>

и фрагмент

    class SettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener{

private lateinit var advertisePreferences: AdvertisePreferences

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    advertisePreferences = AdvertisePreferences(context!!)
}

override fun onResume() {
    super.onResume()
    (activity as AppCompatActivity).supportActionBar?.title = getString(R.string.settings)
    preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}

override fun onPause() {
    super.onPause()
    preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
}

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
    setPreferencesFromResource(R.xml.app_preferences, rootKey)
}

override fun onPreferenceTreeClick(preference: Preference): Boolean {

    when(preference.key){

    }

    return super.onPreferenceTreeClick(preference)
}

override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {

    when(key){
        getString(R.string.theme_key) -> {
            activity?.recreate()
        }
    }
}

    }

Где вы используете setTheme()?

Stanislav Bondar 25.12.2018 10:43

Когда действие создается, до setContentView. В остальных фрагментах тема применена как положено

Yaroslav Shulyak 25.12.2018 10:56

Попробуйте вызвать в setTheme() перед activity?.recreate()

Stanislav Bondar 25.12.2018 11:04

Тот же результат, текст черный на черном фоне

Yaroslav Shulyak 25.12.2018 11:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
864
1

Ответы 1

Похоже, это была ошибка в библиотеке. Теперь это исправлено в androidx.preference: предпочтение: 1.1.0-alpha02

Другие вопросы по теме