Я использую 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()
}
}
}
}
Когда действие создается, до setContentView. В остальных фрагментах тема применена как положено
Попробуйте вызвать в setTheme() перед activity?.recreate()
Тот же результат, текст черный на черном фоне




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