Tengo el siguiente selector se define en un archivo XML en la res/color/redeemlist_item_color.xml:

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">

      <item android:state_pressed="true"
            android:color="#FFFFFF" /> <!-- pressed -->

      <item android:state_selected="true"
            android:color="#FFFFFF" /> <!-- focused -->

      <item android:color="#000000" /> <!-- default -->

   </selector>

También tengo un TextView en un ListView elemento de diseño. Cuando me puse a android:textColor en este TextView a la anterior selector en XML, a continuación, los cambios de color correctamente cuando el elemento está seleccionado. Sin embargo, estoy tratando de configurar este recurso mediante programación de la siguiente manera:

holder.label.setTextColor(R.color.redeemlist_item_color);

Cuando se establece de esta manera, el color no cambia. Puede un selector de ser asignado a un TextView de esta manera?

InformationsquelleAutor Neil Goodman | 2011-04-12

4 Comentarios

  1. 37

    Creo que sea necesario agregar findViewById o algo de esa variedad


    Edit: la de arriba es incorrecta, ya que por mi comentario la respuesta apropiada es

    setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color));
    • Aquí está mi comentario de HD_Mouse: Ok, tal vez me fui de mucho código. Ya he hecho una llamada a findViewById(). Mi problema no es una excepción de puntero nulo o nada, la vista se carga bien. Este es el código que se encuentra en una sub-clase de BaseAdapter.
    • Déjenme decirlo en otras palabras: usted necesita para convertir R. en un valor. Pensé que la función apropiada fue getViewbyid. Me fue mal… prueba esto: setTextColor(getResources().getColor(R. de color.redeemlist_item_color));
    • Esto no es correcto, se debe usar setTextColor ( getResources ().getColorStateList ( R. de color.redeemlist_item_color ) );
    • pero el getResourse() método de no obtener en la CustomAdapter para un listView
    • suena como que usted necesita para pasar el contexto de su listview adaptador y, a continuación, usted puede hacer android:textColor="@drawable/selector_listview_text"
    • Resources#getColorStateList(int) ya no se utiliza en la API de nivel 23. El uso de cualquiera de Resources#getColorStateList(int, Theme) o ContextCompat.getColorStateList(Context, int) lugar

  2. 40

    Tienes que utilizar getColorStateList()

    Yo también estaba luchando con este problema, si desea utilizar un state list, deberá declarar en el color carpeta de recursos, en lugar de la drawable carpeta, y el uso de la setTextColor(getResources().getColorStateList(R.color.redeemlist_item_color)).

    • Esta es la respuesta correcta.
    • Consulte stackoverflow.com/questions/15543186/… para definir el ColorStateList mediante programación.
    • Resources#getColorStateList(int) ya no se utiliza en la API de nivel 23. El uso de cualquiera de Resources#getColorStateList(int, Theme) o ContextCompat.getColorStateList(Context, int) lugar
  3. 4

    Usted puede probar:

    titular.de la etiqueta.setTextColor(getResources().getColor(R. de color.redeemlist_item_color));

    lugar de :

    titular.de la etiqueta.setTextColor(R. de color.redeemlist_item_color);

    • Esto no es correcto, uno debe de la getColorStateList método getColor.
  4. 0

    Rasman es correcta. Usted necesita dar el TextView de una IDENTIFICACIÓN de android:id=»@+/algo». Recuperar una referencia a un determinado utilizando el IDENTIFICADOR y la findViewById y, a continuación, puede configurar el color del texto.

    • Ok, tal vez me fui de mucho código. Ya he hecho una llamada a findViewById(). Mi problema no es una excepción de puntero nulo o nada, la vista se carga bien. Este es el código que se encuentra en una sub-clase de BaseAdapter.

Dejar respuesta

Please enter your comment!
Please enter your name here