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>
我有一个设置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>