color appcompatbutton android xml android-5.0-lollipop imagebutton material-design

android - color - appcompatbutton



Aplicar Material Design Touch Ripple a ImageButton? (4)

Tengo un botón de imagen que no responde con una animación táctil cuando se hace clic porque es una imagen estática a diferencia de los botones normales de la piruleta que vienen con el efecto de onda incorporado. Me gustaría agregar el efecto de onda de diseño de material a la imagen, pero parece que no puedo encontrar una manera de implementarlo. Puedo configurar un filtro de color sobre la imagen, pero ese no es el efecto dominó. Un ejemplo de lo que estoy tratando de hacer es cuando sostienes la imagen de portada de un álbum en Google Play Music y se mueve una sombra en la imagen.


O, alternativamente, si está apuntando a API 21+, use backgroundTint :

<ImageButton android:backgroundTint="@color/white" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_button" style="@style/Widget.AppCompat.ImageButton"/>


Obtuve buenas respuestas de i.shadrin ( here ) y Nicolars ( here ).

La diferencia entre sus respuestas es que ?attr/selectableItemBackgroundBorderless puede darle una android.view.InflateException , por lo que ?android:attr/selectableItemBackground es la solución.

FWIW, no sé por qué ocurre la excepción, porque la primera respuesta funcionó bien en todos mis proyectos anteriores, pero en mi proyecto reciente no (tal vez porque la aplicación theme = android:Theme.Material ?).

Lo extraño que estaba sucediendo es que, aunque se demostró que el efecto dominó superaba al ImageButton, la solución es:

  • Para usar android:foreground="?android:attr/selectableItemBackgroundBorderless" lugar de android:background="?android:attr/selectableItemBackgroundBorderless"

Espero que te ayude si te enfrentas a lo mismo.


Para un resultado aún mejor:

<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_button" android:background="?attr/selectableItemBackgroundBorderless" />


Simplemente puede agregar un fondo a su ImageButton de esta manera:

<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/btn_dialog" android:background="?android:attr/selectableItemBackground" />