设置动态创建的首选项的颜色

时间:2015-01-05 23:16:13

标签: android android-preferences android-theme

我尝试设置主题,但每当我尝试文本颜色时,动态创建的首选项都不会改变。

<style name="PreferenceScreen" parent="AppTheme">
        <item name="android:color">@android:color/black</item>
        <item name="android:textColor">@android:color/black</item>
        <item name="android:textColorSecondary">@android:color/black</item>
        <item name="android:textColorTertiary">@android:color/black</item>
</style>

这是我添加偏好的方式:

Vector<String> categories = getCategories();

//Add all the categories to the preference
PreferenceCategory cat = (PreferenceCategory) findPreference("category_key");

for (final String categoryTitle : categories){
    final Preference pref = new Preference(getActivity().getApplicationContext());

    pref.setTitle(categoryTitle);
    pref.setWidgetLayoutResource(R.layout.list_black_text);
    cat.addPreference(pref);
}

1 个答案:

答案 0 :(得分:1)

使用pref.setLayoutResource(R.layout.list_item)代替pref.setWidgetLayoutResource()

您可以在上面提到的layout/list_item.xml中定义颜色和样式,它应该类似于:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:clipToPadding="false"
    >

   <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingTop="16dp"
        android:paddingBottom="16dp">

        <TextView android:id="@+android:id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            />
        <TextView android:id="@+android:id/summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@android:id/title"
            android:layout_alignLeft="@android:id/title"
            android:maxLines="10" />
    </RelativeLayout>
    <LinearLayout android:id="@+android:id/widget_frame"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="end|center_vertical"
        android:paddingLeft="16dp"
        />
</LinearLayout>
  • @+android:id/title将填写您的标题;
  • @+android:id/summary包含您的摘要;
  • @+android:id/widget_frame包含您使用pref.setWidgetLayoutResource()设置的任何内容(可能是CheckBox,或Switch,或其他任何内容。

只需添加XML属性即可根据需要更改文本颜色。