如何在PreferenceScreen中更改PreferenceCategory分隔符的颜色

时间:2015-07-14 22:53:43

标签: android android-preferences android-styles divider preferencefragment

我有android.support.v4.preference.PreferenceFragment,它使用以下PreferenceScreen:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
    android:title="Cat1"
    android:key="pref_cat1">
    <ListPreference
        android:key="pref_list1"
        android:title="@string/pref_list1"
        android:dialogTitle="@string/pref_list1"
        android:entries="@array/pref_list1_entries"
        android:entryValues="@array/pref_list1_entries"
        android:defaultValue="@string/pref_list1_default"/>
    <EditTextPreference
        android:key="pref_text2"
        android:title="@string/pref_text2"
        />
</PreferenceCategory>
<PreferenceCategory
    android:title="Cat2"
    android:key="pref_cat2">
    <EditTextPreference
        android:key="pref_text3"
        android:title="@string/pref_text3"
        />
</PreferenceCategory>

显示PreferenceFragment时,会在首选项之间显示一些分隔符,但也会在每个PreferenceCategory的名称下显示。 虽然我可以通过访问PreferenceFragment的ListView轻松修改首选项之间的分隔符的颜色,但这对PreferenceCategory分隔符没有影响。

如何更改此类分隔线的颜色?

2 个答案:

答案 0 :(得分:7)

我的Prefernces文件中存在同样的问题。我通过以下步骤解决了这个问题:

1:定义文件名preferences_category.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+android:id/title"
        style="?android:attr/listSeparatorTextViewStyle"

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical" />

    <View style="@style/Divider" />

</LinearLayout>

2:在样式xml文件中定义style

<style name="Divider">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">1dp</item>
    <item name="android:background">@android:color/white</item>
</style>

3:preferences_category.xml xml文件中将android:layout文件添加为preferences属性::

 <PreferenceCategory 
    android:title="My title"
    android:layout="@layout/preferences_category">

答案 1 :(得分:0)

现在,您还可以在代码中为分隔符设置自定义可绘制对象。我不确定支持库的旧版本,但至少现在可以在AndroidX上使用它。

在您的PreferenceFragmentCompat中,您可以添加:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    setDivider(getResources().getDrawable(R.drawable.your_divider_drawable, requireActivity().getTheme()));
}

您还可以致电setDivider(null)删除分隔符。