Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Selector en el color de fondo de TextView

Estoy intentando cambiar el color de fondo de un widget Android TextView cuando el usuario lo toca. He creado un selector para ese propósito, que se almacena en res/color/selector.xml y se parece aproximadamente a eso:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="@color/semitransparent_white" /> <item android:color="@color/transparent" /> </selector> 

El atributo que se clickable en el TextView es true , en caso de que sea de interés.

Cuando asigno este selector a un TextView como android:background="@color/selector" , estoy recibiendo la siguiente excepción en tiempo de ejecución:

ERROR / AndroidRuntime (13130): Causado por: org.xmlpull.v1.XmlPullParserException: La línea # 6 del archivo XML binario requiere un atributo "drawable" o una etiqueta secundaria que define un drawable

Cuando cambio el atributo a dibujable, funciona, pero el resultado parece estar completamente equivocado porque los ID parecen interpretarse como referencias de imagen en lugar de referencias de color (como sugiere el "dibujable").

Lo que me confunde es que puedo establecer una referencia de color, por ejemplo "@ color / black", como el atributo de fondo directamente. Esto está funcionando como se esperaba. El uso de selectores no funciona.

También puedo utilizar el selector como el textColor sin problemas.

¿Cuál es la forma correcta de aplicar un selector de color de fondo a un TextView en Android?

  • GridView con número dinámico de columnas en cada fila
  • Cómo obtener el número de milisegundos transcurrido hasta ahora hoy
  • ¿Cómo inyectar dependencias en cualquier tipo de objeto con Dagger2?
  • Android: Acceso a la carpeta de activos archivo de base de datos sqlite con extensión .sqlite
  • Android Threading: Esta clase de Handler debe ser estática o pueden producirse fugas
  • Problema en el bloqueo de usuario en la lista de chat usando smack y servidor de fuego abierto
  • Facebook SDK para Android lanzando excepción ClassNotFound
  • DoubleTap en android
  • 5 Solutions collect form web for “Selector en el color de fondo de TextView”

    El problema aquí es que no se puede definir el color de fondo con un selector de color, necesita un selector de dibujo . Por lo tanto, los cambios necesarios se verían así:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/selected_state" /> </selector> 

    También necesitará mover ese recurso al directorio drawable donde tendría más sentido ya que no es un selector de color per se.

    Entonces tendrías que crear el archivo res/drawable/selected_state.xml como este:

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/semitransparent_white" /> </shape> 

    Y finalmente, lo usarías así:

     android:background="@drawable/selector" 

    Nota : la razón por la cual el OP estaba obteniendo un recurso de imagen es probablemente porque trató de hacer referencia a su recurso que estaba todavía en el directorio de color pero usando @drawable para que terminara con una colisión de ID, seleccionando el recurso incorrecto.

    Espero que esto todavía puede ayudar a alguien, incluso si el OP probablemente ha, espero, resuelto su problema por ahora.

    La solución de Benoit funciona, pero en realidad no es necesario incurrir en la sobrecarga para dibujar una forma. Dado que los colores pueden ser dibujables, simplemente defina un color en un archivo /res/values/colors.xml:

     <?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="semitransparent_white">#77ffffff</drawable> </resources> 

    Y luego usar como tal en su selector:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/semitransparent_white" /> </selector> 

    Una solución aún más simple a lo anterior:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <color android:color="@color/semitransparent_white" /> </item> <item> <color android:color="@color/transparent" /> </item> </selector> 

    Guárdelo en la carpeta que se puede dibujar y estará listo para hacerlo.

    Incluso esto funciona.

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/dim_orange_btn_pressed" /> <item android:state_focused="true" android:drawable="@color/dim_orange_btn_pressed" /> <item android:drawable="@android:color/white" /> </selector> 

    android:drawable atributo android:drawable a cada artículo, y sus valores son colores.

    Por cierto, ¿por qué dicen que el color es uno de los atributos del selector ? No escriben ese android:drawable se requiere.

    Recurso de lista de colores del estado

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color="hex_color" android:state_pressed=["true" | "false"] android:state_focused=["true" | "false"] android:state_selected=["true" | "false"] android:state_checkable=["true" | "false"] android:state_checked=["true" | "false"] android:state_enabled=["true" | "false"] android:state_window_focused=["true" | "false"] /> </selector> 

    Para quien está buscando hacerlo sin crear un sector de fondo, simplemente agregue esas líneas al TextView

     android:background="?android:attr/selectableItemBackground" android:clickable="true" 

    También para hacer uso seleccionable:

     android:textIsSelectable="true" 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.