studio efecto custom android android-button appcompat rippledrawable

efecto - ripple effect android button



AppCompatButton backgroundTint API<21 (3)

Las ondulaciones no están disponibles como una funcionalidad integrada en Android <21. Esto se debe a problemas de rendimiento: los dispositivos con la nueva API pueden usar el RenderThread que no está disponible para dispositivos más antiguos. Véase también: http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

¿Por qué no hay ondulaciones en pre-Lollipop? Gran parte de lo que permite que RippleDrawable se ejecute sin problemas es el nuevo RenderThread de Android 5.0. Para optimizar el rendimiento en versiones anteriores de Android, hemos dejado RippleDrawable por ahora.

Quiero usar efectos de rizo en los botones. AppCompat v22.1 agregó AppCompatButton y nuevas funcionalidades al tintado de AppCompat.

Mi diseño:

<android.support.v7.widget.AppCompatButton android:id="@+id/add_remove_button" android:layout_width="match_parent" android:layout_height="match_parent" android:backgroundTint="@color/primary" android:textColor="@android:color/white" android:text="Remove" />

En mi dispositivo de prueba API 22, el efecto de rizado funciona perfectamente, pero estoy codificando para API 11 y, desafortunadamente, backgroundTint necesita API> = 21. ¿Cómo puedo configurar el efecto de rizo en los botones en versiones anteriores de API?


Para admitir la funcionalidad de rizado debajo de API 21, es posible que tenga que agregar un dibujo en el fondo de su botón:

<android.support.v7.widget.AppCompatButton android:id="@+id/add_remove_button" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/button_ripple" android:backgroundTint="@color/primary" android:textColor="@android:color/white" android:text="Remove" />

Luego, debe agregar sus xmls con el mismo nombre en los directorios drawable y drawable-v21 (si no los tiene, puede crearlos y se vincularán automáticamente).

/res/drawable-v21/button_ripple.xml

<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/white"> <item> <shape> <solid android:color="@color/white" /> </shape> </item> </ripple>

/res/drawable/button_ripple.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <solid android:color="@color/white" /> </shape> </item> </selector>


Solo usa app:backgroundTint lugar de android:backgroundTint , el tinte tendrá efecto debajo de Lollipop. La razón es AppCompatActivity AppCompatDelegateImplV7 use AppCompatViewInflater para cambiar automáticamente el botón o TextView a AppCompatButton o AppCompatTextView, luego app:backgroundTint surta efecto.