radius - schemas android
Cambia el tinte de dibujable en xml selector. (2)
¿Has probado con un selector ?
Puedes encontrar algunos ejemplos HERE
Tengo un botón con el fondo definido en xml. Me gustaría tintar el botón según el estado actual en el que se encuentra, es decir, presionado, enfocado, normal.
Aquí está mi archivo xml a continuación. Además, mi colored_tint_dark
, y colored_tint
son colores translúcidos que estoy tratando de dibujar sobre la imagen dibujable que llamo desde la carpeta de recursos. Aquí está el problema. Cuando la IU se carga por primera vez, la imagen tiene el tinte apropiado, pero después de presionarla, el estado presionado no muestra ningún tinte, entonces el estado normal no muestra ningún tinte.
<?xml version="1.0" encoding="utf-8"?>
<item android:state_pressed="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button">
<shape>
<gradient
android:endColor="@color/colored_tint"
android:startColor="@color/colored_tint"
android:angle="270" />
<stroke
android:width="0dp"
android:color="@color/colored_tint" />
<corners
android:radius="0dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_focused="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button">
<shape>
<gradient
android:endColor="@color/colored_tint"
android:startColor="@color/colored_tint"
android:angle="270" />
<stroke
android:width="0dp"
android:color="@color/colored_tint" />
<corners
android:radius="0dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:drawable="@drawable/rounded_grayscale_pinstripe_button">
<shape>
<gradient
android:endColor="@color/colored_tint_dark"
android:startColor="@color/colored_tint_dark"
android:angle="270" />
<stroke
android:width="0dp"
android:color="@color/colored_tint_dark" />
<corners
android:radius="0dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
Sé que hay soluciones para esto en java, pero estoy buscando específicamente una solución en xml. Gracias.
Crea un selector tint_menu_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_pressed="true" />
<item android:color="@color/white" android:state_activated="true" />
<item android:color="@color/green" />
</selector>
(En mi ejemplo, la imagen es blanca cuando está seleccionada, y verde cuando no está seleccionada)
Luego, en su xml, puede agregar el atributo de tinte a ImageView:
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:tint="@color/tint_menu_item"
android:src="@drawable/ic_menu_home" />
También puede usar este selector en un TextView usando textColor attibute:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/tint_menu_item" />