color appcompatbutton android ripple material android-5.0-lollipop rippledrawable

android - appcompatbutton - Lollipop RippleDrawable vs Selector para Pre-Lollipop



ripple color android (1)

Tengo botones con diferentes png draw9patch como fondo. Actualmente, los botones están controlados por un selector que se ve más o menos así:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/pressed" android:state_pressed="true"/> <item android:drawable="@drawable/disabled" android:state_enabled="false"/> <item android:drawable="@drawable/focused" android:state_focused="true"/> <item android:drawable="@drawable/default"/> </selector>

Para Android Lollipop tienen un RippleDrawable para el efecto táctil, que es algo como esto:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight"> <item> ... </item> </ripple>

En cuanto al nuevo efecto de ondulación táctil:

1: ¿Puedo establecer draw9patch como fondo para RippleDrawable ?

2: ¿Cómo acomodo los dos xml''s anteriores? ¿Quiero seguir el diseño del material? ¿Debo RippleDrawable una nueva carpeta / layout xml para el nuevo RippleDrawable ?


1) Sí. Consulte la documentación de RippleDrawable para obtener más detalles sobre cómo se componen las capas, pero básicamente desea:

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:attr/colorControlHighlight"> <item android:drawable="@drawable/yourninepatch" /> </ripple>

O para manejar también el estado de discapacidad de una manera limpia, es posible que desee:

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:attr/colorControlHighlight"> <item> <selector> <item android:state_enabled="false"> <nine-patch android:src="@drawable/yourninepatch" android:alpha="?android:attr/disabledAlpha" /> </item> <item> <nine-patch android:src="@drawable/yourninepatch" /> </item> </selector> </item> </ripple>

2) Sí, debe colocar su rizado XML en drawable-v21.