当前位置: 首页 > 知识库问答 >
问题:

首选项FragmentCompat在更改主题和重新创建活动时不会更改颜色

羊昊苍
2023-03-14

我使用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()
        }
    }
}

    }

共有1个答案

王才
2023-03-14

好像是图书馆里的虫子。现在,它已在androidx中修复。偏好:偏好:1.1.0-alpha02

 类似资料:
  • 我有一个设置xml文件,其中有checkboxpreferences和一个switchpreference,当我切换到暗模式时,开关和复选框的颜色不会根据所选模式自动改变这里是我所说的图像 所以switchpreference应该是白色的,当应用程序是暗模式,但它没有改变,谁能帮助我修复它,谢谢 *这是我的设置xml文件

  • 我想在我的应用程序中应用不同的主题。我想更改导航栏和浮动操作按钮的颜色。 现在我可以更改导航栏的颜色,但浮动操作按钮的颜色没有变化。当主题更改时,如何动态更改工厂的颜色? 风格: 绝妙的: 晶圆厂选择器: 谢谢你...

  • 我在设置中使用ListPreference,我希望颜色适应当前主题的颜色。目前,我正在将主题的alertDialogTheme样式更改为我自己的样式。我已经了解了如何更改对话框标题的颜色、对话框按钮的颜色、单选按钮的文本以及当前所选项目的单选按钮的颜色。我想更改未选中项目单选按钮的颜色。我用红色圈出了我想改变的颜色。 列表首选项: 主题风格:

  • 我的xml代码如下: 我怎么在这里更改标题的颜色?我对android很陌生。

  • 我有一个,有4个选项卡。

  • 我已经阅读了几十篇文章,解释了如何在PreferenceActivity中更改首选项的文本颜色。我没有偏好活动。我在res/xml中使用PreferenceFragment和PreferenceScreen 设置片段 fragment\u设置。xml 偏好。xml 我尝试将添加到中的所有首选项中,但所有文本仍然是黑色的。所有这些线程都在谈论创建一种新样式,但没有一个解释如何将其应用于首选项片段。