2012-07-23 9 views

Respuesta

44

uso esta clase personalizar PreferenceCategory:

public class MyPreferenceCategory extends PreferenceCategory { 
    public MyPreferenceCategory(Context context) { 
     super(context); 
    } 

    public MyPreferenceCategory(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyPreferenceCategory(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     TextView titleView = (TextView) view.findViewById(android.R.id.title); 
     titleView.setTextColor(Color.RED); 
    } 
} 

y añadir esto a su archivo Pref.xml:

<ali.UI.Customize.MyPreferenceCategory android:title="@string/pref_server" /> 
+2

Encontré que 'findViewById()' todavía no funcionaba en 'onBindView()'. Lo hice en 'onCreateView()', que funcionó. – ryan

+0

'titleView.setTextColor (Color.RED);' throws 'NullPointerException'. ¿Alguna solución? –

+0

La corrección está en el primer comentario en sí ... – Rohan

25

Una solución es hacer un tema para su PREFERENCE. Así que en su themes.xml o styles.xml (mejor ponerlo en themes.xml):

<style name="PreferenceScreen" parent="YourApplicationThemeOrNone"> 
    <item name="android:textColor">@color/yourCategoryTitleColor</item> 
</style> 

entonces en su AndroidManifest.xml:

<activity 
     android:name="MyPreferenceActivity" 
     ... 
     android:theme="@style/PreferenceScreen" > 
</activity> 

funcionó perfectamente para mí.

+2

Para mí, esta es la respuesta correcta – Javi

2
public class MyPreferenceCategory extends PreferenceCategory { 

public MyPreferenceCategory(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    } 
public MyPreferenceCategory(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 
public MyPreferenceCategory(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
    } 

@Override 
protected View onCreateView(ViewGroup parent) { 
    // It's just a TextView! 
TextView categoryTitle = (TextView)super.onCreateView(parent); 
categoryTitle.setTextColor(parent.getResources().getColor(R.color.orange)); 

    return categoryTitle; 
    } 
} 

Y en su prefs.xml:

<com.your.packagename.MyPreferenceCategory android:title="General"> 
. 
. 
. 
</com.your.packagename.MyPreferenceCategory> 

O también puede utilizar este answer

+0

Esto funcionó perfectamente para mí con una modificación. En lugar de 'categoryTitle.setTextColor (parent.getResources() GetColor (R.color.orange).);' tuve que usar 'categoryTitle.setTextColor (Color.BLACK);' – ckn

25

Una manera fácil de hacer esto es establecer el diseño personalizado para la preferenceCategory aquí:

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

A continuación, establezca el código dentro de su archivo de distribución de preferencias_category:

<TextView 
    android:id="@android:id/title" 
    android:textColor="@color/deep_orange_500" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="16sp" 
    android:textStyle="bold" 
    android:textAllCaps="true"/> 

+0

Esto se forma rápida, fácil y correcta de hacerlo. –

+0

La mejor solución, porque tiene el control directo de todo lo que está dentro de la vista de texto – Sniper

+0

¡usted es un salvavidas! – CppChase

2

revés será menciona el tema en su AppTheme, nivel de aplicación

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     .....//your other items 
     <item name="preferenceTheme">@style/PrefTheme</item> 
    </style> 

    <style name="PrefTheme" parent="@style/PreferenceThemeOverlay"> 
     <item name="preferenceCategoryStyle">@style/CategoryStyle</item> 
    </style> 

    <style name="CategoryStyle" parent="Preference.Category"> 
     <item name="android:layout">@layout/pref_category_view</item> 
    </style> 

XML: pref_category_view

<?xml version="1.0" encoding="utf-8"?> 
<TextView android:id="@android:id/title" 
      style="?android:attr/listSeparatorTextViewStyle" 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:textColor="@color/red" 
      android:layout_height="wrap_content" 
    /> 

Para la visita más personalización v7 Preferences res

Importante: Estoy utilizando PreferenceFragmentCompat de lib v7 Preference.

Happy_Coding;

10

Para cambiar el color del texto de la categoría de preferencia, solo establezca un tema en su PreferenceActivity en su manifiesto de Android y asegúrese de que colorAccent existe. Este color es tomado por su PreferenceCategory.

+2

¡Esta es la respuesta correcta! Agregue @ android: color/white al tema de su PreferenceActivity y el color de las casillas de verificación y títulos cambiará a blanco. – DiscDev

1

En realidad acabo de descubrir ese texto de categoría de preferencia usando colorAccent.

Si su aplicación no usa el estilo de colorAccent, puede ir al styles.xml y encontrar
<item name="colorAccent">@color/colorPrimary</item>, y cambiar el color como desee.

+0

IMO, esta es la respuesta correcta a partir de Lollipop y el diseño del material. Referencia: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/frameworks/base/core/res/res/layout/preference_category_material.xml? av = f – Ginandi

Cuestiones relacionadas