ListPreference 条目的文本颜色是白色而不是黑色

Text color of ListPreference entries is white instead of black

我有一个设置activity

public class SettingsActivity extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

还有一个片段:

public class SettingsFragment extends PreferenceFragmentCompat {


    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.settings, rootKey);
    }
}

activity_settings.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

        <TextView
            android:id="@+id/activitySettings_updateFrequencyValueText"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="@id/view_settings_fragment"
            android:layout_marginBottom="0dp"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="0dp"
            android:ellipsize="marquee"
            android:gravity="center"
            android:textSize="15sp"
            android:paddingStart="10dp"
            android:paddingLeft="10dp"
            >
        </TextView>
        <fragment
            android:name="com.myapp.SettingsFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/view_settings_fragment"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            android:layout_marginBottom="0dp"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="0dp"
            />

</androidx.constraintlayout.widget.ConstraintLayout>

settings.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <ListPreference
        android:key="bus_update_frequency"
        android:title="@string/bus_update_frequency"
        android:summary="@string/bus_update_frequency_desc"
        android:entries="@array/bus_update_frequency_entries"
        android:entryValues="@array/bus_update_frequency_values"
        android:defaultValue="10 seconds"
        />
</PreferenceScreen>

res/values/arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="bus_update_frequency_entries">
        <item>10 seconds</item>
        <item>20 seconds</item>
        <item>30 seconds</item>
        <item>40 seconds</item>
        <item>50 seconds</item>
        <item>60 seconds</item>
    </string-array>
    <string-array name="bus_update_frequency_values">
        <item>10</item>
        <item>20</item>
        <item>30</item>
        <item>40</item>
        <item>50</item>
        <item>60</item>
    </string-array>
</resources>

一切正常,设置页面如下所示:

但是当您打开 ListPreference 时,文本出于某种原因是白色的。看起来是这样的,高亮的时候可以看到里面有文字

由于 ListPreference 没有 textColor 属性,我还没有想出如何将其更改为黑色。有什么想法吗?

编辑:

我认为这是造成此问题的原因是我的警报对话框是操作栏中的栗色,带有白色文本。那么如何将 ListPreference 的背景颜色更改为该颜色或通过主题更改文本颜色?

EDIT2:

没关系,更改警告文本的颜色不会更改 ListPreference 文本的颜色。

我不知道是什么导致了这个问题,但我最终解决了它

为了解决这个问题,我必须创建自己的自定义主题:

    <style name="PreferencesTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:textColorPrimary">@color/primaryBlack</item>
        <item name="android:textColorSecondary">@color/colorPrimary</item>
        <item name="android:textColorTertiary">@color/primaryBlack</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorPrimary</item>
        <item name="textColorAlertDialogListItem">@color/primaryBlack</item>
    </style>

    <style name="PreferencesTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="PreferencesTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

然后在activity的on create方法中设置主题:

public class SettingsActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.PreferencesTheme);
        super.onCreate(savedInstanceState);

使对话框文本变黑的具体项目是这个:

<item name="textColorAlertDialogListItem">@color/primaryBlack</item>