Encabezados de categoría de preferencias personalizadas

Tengo una pantalla de preferencias simples definida así

        

Ya tengo una configuración de estilo y la utilizo en otro lugar de mi aplicación.

  #000000 bold 12sp #cccccc 6px 6px 12px  

y aquí está mi actividad

 public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preferences); } } 

¿Cómo aplico mi estilo personalizado al encabezado PreferenceCategory ?

Deberías echarle un vistazo al estilo Preference.Category :

  

Echemos un vistazo al archivo preference_category.xml :

   

Por lo tanto, debe crear un tema personalizado que amplíe el Theme android predeterminado y anule el valor ListHeader con el estilo ListHeader . Y luego aplique este tema a la Actividad que amplía PreferenceActivity .


Aquí sabrás como podrás hacerlo.

Primero , en su styles.xml agregue el siguiente código:

   

Luego, en su AndroidManifest.xml agregue el tema a su actividad preferida:

   ...  

Aquí hay una captura de pantalla:

enter image description here

@inazaruk dio la respuesta lo suficientemente bien pero desde las actualizaciones recientes, ADT 18 and above , hay algunas restricciones sobre los styles dan el error

Error retrieving parent for item: No resource found that matches the given name '@android:style/Widget.TextView.ListSeparator'.

Vea este enlace por el motivo del problema y la solución . Como esta publicación no proporciona un código para entender, proporciono mi código aquí

     

Diseñarlo como se describe en la respuesta de inazaruk es bastante simple, pero solo cambia el estilo del texto en el encabezado, no ofrece una manera de especificar un diseño completamente nuevo (el estilo no aplicará el elemento de layout ). Sin embargo, hay una solución directa si extiende la clase:

 public class MyPreferenceCategory extends PreferenceCategory { public MyPreferenceCategory(Context context) { super(context); setLayoutResource(R.layout.yourlayout); } public MyPreferenceCategory(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.yourlayout); } } 

y simplemente use esto en lugar de la PreferenceCategory original al definir su diseño de Preferencias.

Su diseño puede, por supuesto, tener todo lo que desee, incluidas las líneas encima o debajo del texto, diferentes fondos, relleno, lo que sea. Por ejemplo, esto mostrará un subtítulo de diseño de material con una línea arriba:

      

Al igual que la respuesta de Gábor, en lugar de extender PreferenceCategory puedes hacer lo siguiente: 1. Haz tu diseño personalizado. Lo llamé preference_category.xml :

      

Importante: el diseño debe contener una vista de texto con esta identificación: android: id = “@ + android: id / title”

2.y en la preferencia agrega esta línea: android: layout = “@ layout / preference_category”

    ... // other preferences in the category