¿Cómo cambiar el color del texto de la categoría de preferencia en Android?

5 minutos de lectura

El atributo textColor no funciona. Aquí está mi XML:

<PreferenceCategory
        android:title="Title"
        android:textColor="#00FF00">

¿Algunas ideas?

use esta clase PreferenceCategory personalizada:

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 agregue esto en su archivo Pref.xml:

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

  • encontre eso findViewById() todavía no funcionaba en onBindView(). lo hice en onCreateView() en cambio, que funcionó.

    – Ryan

    20 de septiembre de 2013 a las 1:58

  • titleView.setTextColor(Color.RED); lanza NullPointerException. ¿Alguna solución?

    – Angrayudi H.

    25 de noviembre de 2015 a las 12:49

  • Tenga en cuenta que uno debe reemplazar ali.UI.Customize con el nombre del paquete de su propia MyPreferenceCategory.

    – Al Lelópata

    5 oct 2016 a las 20:10

  • ¡Muchas gracias! Este es el código para anular el android.support.v7.preference.PreferenceViewHolderen sustitución del método onBindView: @Override public final void onBindViewHolder(final PreferenceViewHolder vh) { super.onBindViewHolder(vh); TextView txt = (TextView) vh.findViewById(android.R.id.title); txt.setTextColor(Color.RED); }

    – Fernando Jascovich

    6 de junio de 2017 a las 21:48


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

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

Luego configure su código dentro de su archivo de diseño de preferencias_categoría:

<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"/>

  • La mejor solución, porque tienes control directo de todo dentro de la vista de texto.

    – Stoycho Andreev

    26 de julio de 2016 a las 16:26

  • No puedo pasar el texto de Category-title a layout-textView, es simplemente un área en blanco. ¿Cómo lo agrego?

    – Félix Éder

    10/02/2018 a las 17:00

  • La parte android:id=”@android:id/title” es necesaria para que el texto de la categoría de preferencia sea visible.

    – Marcell

    22 de diciembre de 2020 a las 17:54

  • “El recurso @layout/preferences_category está marcado como privado en androidx.preference:preference:1.2.0” ¿hay alguna forma de evitar esto?

    –Joe Pleavin

    7 ago a las 20:34

Una solución es crear un tema para su PreferenceScreen. Entonces, en su themes.xml o styles.xml (es mejor ponerlo en themes.xml):

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

luego en su AndroidManifest.xml:

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

Funcionó perfectamente para mí.

  • @Javi Lo mismo aquí, ¡esta respuesta te permite cambiar dinámicamente los detalles del tema! 🙂

    – varun

    4 de marzo de 2019 a las 23:05


  • Mierda, ¿cómo es que todas las demás respuestas en todas partes son tan complicadas y largas cuando puedes hacerlo tan simple? ¡Gracias!

    – Silla grande

    27 de febrero de 2020 a las 12:53

  • Funcionó perfectamente, pero necesita agregar estas líneas al estilo @color/with @color/with

    – MohammadReza

    8 de junio de 2020 a las 9:32

  • Esto todavía no cambia el color del título de PreferenceCategory (` `)

    – James Poulose

    2 abr 2021 a las 23:55

avatar de usuario
efrén

Para cambiar el color del texto de la categoría de preferencia, solo establezca un tema para su PreferenceActivity en su manifiesto de Android y asegúrese de que acento de color el artículo existe. Este color lo toma tu PreferenceCategory.

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

Si su aplicación no usaba el estilo de colorAccentusted puede ir a styles.xml y encontrar
<item name="colorAccent">@color/colorPrimary</item>y cambia el color como quieras.

  • En mi opinión, esta es la respuesta correcta a partir de Lollipop y material design. Referencia – grepcode.com/file/repository.grepcode.com/java/ext/…

    – Ginandi

    12 dic 2017 a las 21:21

  • Gracias, este fue en realidad mi error.

    – Erdnuss

    18 de junio de 2020 a las 13:34

Al revés, mencionará el tema en su Tema de la aplicaciónnivel 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 más personalización visita v7 Preferencias res

Importante: Estoy usando PreferenceFragmentCompatPreferenceFragmentCompat de Preferencia de lib v7.

  • En mi opinión, esta es la respuesta correcta a partir de Lollipop y material design. Referencia – grepcode.com/file/repository.grepcode.com/java/ext/…

    – Ginandi

    12 dic 2017 a las 21:21

  • Gracias, este fue en realidad mi error.

    – Erdnuss

    18 de junio de 2020 a las 13:34

avatar de usuario
avianey

Usando Material Theme, solo tiene que anular la siguiente propiedad:

<style name="YourTheme" parent="@style/Theme.MaterialComponents">
    <item name="colorAccent">@color/your_custom_color</item>
</style>

  • ¡Esto es mucho más fácil! ¿Por qué usaría una clase personalizada para establecer el color del título de la categoría globalmente?

    – AW

    15 de noviembre de 2020 a las 7:37

¿Ha sido útil esta solución?