studio programacion color android

color - manual de programacion android pdf



Selector en el color de fondo de TextView (5)

El problema aquí es que no puede definir el color de fondo con un selector de color, necesita un selector dibujable . Entonces, 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ía mover ese recurso al directorio drawable donde tendría más sentido ya que no es un selector de color per se.

Entonces tendría 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 que OP obtuvo un recurso de imagen dibujado es probablemente porque intentó simplemente hacer referencia a su recurso que todavía estaba en el directorio de color pero usando @drawable por lo que terminó con una colisión de identificación, seleccionando el recurso incorrecto.

Espero que esto todavía pueda ayudar a alguien, incluso si el OP probablemente, ahora, haya resuelto su problema.

Estoy intentando cambiar el color de fondo de un widget de Android TextView cuando el usuario lo toque. Creé un selector para ese propósito, que está almacenado en res/color/selector.xml y se ve más o menos así:

<?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 seleccionable de TextView es true , en caso de que sea de su interés.

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

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

Cuando cambio el atributo a dibujable, funciona, pero el resultado parece completamente incorrecto porque las identificaciones 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 atributo de fondo directamente. Esto está funcionando como se esperaba. Usar selectores no funciona.

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

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


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 android:drawable .

Recurso de lista de estado de color

<?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>


La solución de Benoit funciona, pero realmente no necesita incurrir en gastos generales para dibujar una forma. Como los colores pueden ser dibujables, simplemente defina un color en un archivo /res/values/colors.xml:

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

Y luego use 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="@color/semitransparent_white" /> </selector>


Para quién 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 su uso seleccionable:

android:textIsSelectable="true"


Una solución aún más simple para 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árdalo en la carpeta dibujable y listo.