¿Botón circular material en Android?

Echa un vistazo a este elemento de la lista en la aplicación CyanogenMod Music:

introduzca la descripción de la imagen aquí

¿Qué View se está utilizando para ese botón de configuración? No podría ser un ImageButton porque cuando lo presione, crea una ondulación circular:

introduzca la descripción de la imagen aquí

Tal vez una manera de hacerlo es inflar un botón de menú en la Toolbar de Toolbar dentro de la lista. Pero llamar a inflateMenu() requiere un nivel mínimo API 21. ¿Qué otras maneras se pueden utilizar para lograr esto? ¡Gracias!

Si desea tener una ondulación circular se puede definir de dos maneras.

  1. Puede utilizar una ondulación sin límites – Si no define una forma o una máscara, la ondulación predeterminada es una forma circular
  2. Puede definir específicamente la forma de la máscara como circular

Una ondulación ilimitada se define muy simplemente como esto:

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray" /> 

Si toca la View , creará una ondulación circular básica que, por ejemplo, se utilizará en la pantalla de bloqueo de Android predeterminada al introducir un PIN.


Sin embargo, las ondulaciones ilimitadas por definición no tienen límites definidos y como tal no son siempre lo que quieres. Si sólo desea definir específicamente la forma y el tamaño de la ondulación puede utilizar una máscara. Esto tiene la ventaja de que el elemento utilizado para definir la forma no se dibujará. Funciona así:

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@android:color/darker_gray"> <!-- If you give an item this mask id then it will only be used to determine the shape of --> <!-- ripple, but will not be drawn in any way --> <item android:id="@android:id/mask"> <!-- android:shape defines the shape of the ripple. I use oval for a circular one, --> <!-- but there are also rectangle, line, ring --> <shape android:shape="oval"> <solid android:color="@android:color/white"/> </shape> </item> </ripple> 

Usted puede elegir entre esas dos opciones arriba – que nunca uno que más te guste. Sólo tiene que asignar el ripple a un ImageView como este y debe verse muy parecido a la imagen en su pregunta:

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ripple" android:src="@drawable/your_icon" android:clickable="true" /> 

He añadido el atributo que se clickable para que la ondulación se habilite incluso si no asigna un oyente de clics al ImageView . Siempre y cuando usted asigna un oyente de clics que realmente no lo necesitan.

  • Espacio en blanco debajo de CoordinatorLayout en DrawerLayout
  • Cómo reparar sombra en FloatingActionButton escalado mediante la biblioteca de soporte 23
  • Android Material Design en los dispositivos KitKat (e inferior)
  • Estilizar / colorear el botón SwitchCompat en Android Lollipop para el diseño del material
  • No se encontró ningún recurso que coincida con el nombre dado: attr 'android: actionModeShareDrawable' appcompat-v7: 21.0.0 con compileSdkVersion 21
  • ¿Hay alguna manera de hacer una sombra Material-style en API <21 (5.0 Lolipop)?
  • Dos botones flotantes en el único diseño
  • Error de la biblioteca de soporte técnico de Android 23.2.0 al establecer style = "@ style / Widget.AppCompat.Button.Colored"
  • Cómo personalizar el color de AppCompatButton
  • AppCompat Snackbar no centrado en la tableta
  • El cuadro de diálogo de alerta de Android no está bien diseñado en Lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.