¿Cómo puedo hacer que mi botón se parezca más al botón de acción flotante de Android JellyBean (v21)?

¿Cómo hago que mi botón se parezca más al botón de acción flotante?

Mi botón hasta ahora parece cerca, pero hasta ahora, no se ve igual. ¿Qué otros cambios sugeriría usted?

Una imagen de lo que el botón de acción flotante parece es abajo, como es una imagen de mi botón hasta el momento y mi código hasta ahora

A continuación se muestra una imagen del botón de acción flotante real:

Introduzca aquí la descripción de la imagen

Una imagen de mi botón actual hasta ahora está abajo:

Introduzca aquí la descripción de la imagen

Mi API es v19

Código:

Código para el botón real

<Button android:layout_width="wrap_content" android:layout_height="60dp" android:text="+" android:textSize="60sp" android:background="@drawable/addbutton" android:elevation="3dp" android:layout_marginTop="215dp" android:layout_marginLeft="310dp" android:fontFamily="sans-serif-light" android:gravity="center" android:textColor="#ffff" /> 

Addbutton.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <layer-list> <item> <shape android:shape="oval"> <solid android:color="#08000000"/> <padding android:bottom="3px" android:left="3px" android:right="3px" android:top="3px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#09000000"/> <padding android:bottom="2px" android:left="2px" android:right="2px" android:top="2px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#10000000"/> <padding android:bottom="2px" android:left="2px" android:right="2px" android:top="2px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#11000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#12000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#13000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#14000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#15000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#16000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#17000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> </layer-list> </item> <item> <shape android:shape="oval"> <solid android:color="#FF4186"/> </shape> </item> </layer-list> 

Resultado:

Botón resultante


Botón en un diseño:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> ... <RelativeLayout xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom|end"> <Button android:id="@+id/add_button" android:layout_width="50dp" android:layout_height="50dp" android:layout_margin="10dp" android:background="@drawable/add_button_selector" android:gravity="center" android:stateListAnimator="@null" android:text="+" android:textSize="25sp" android:elevation="3dp" android:fontFamily="sans-serif-light" android:textColor="#FFF" tools:ignore="HardcodedText,UnusedAttribute"/> </RelativeLayout> </LinearLayout> 

Explicación:

  • RelativeLayout, superpone todo y coloca el botón en la esquina inferior derecha.
  • margin proporciona cierto espacio para la elevación
  • gravity centra el fondo dibujable y el texto
  • stateListAnimator establecer a null por lo que no se desorden con la elevación (se puede stateListAnimator a través de este)

Res / drawables-v21 / add_button_selector.xml

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#b0372c"> <item> <shape android:shape="oval"> <solid android:color="#da4336" /> </shape> </item> </ripple> 

Res / drawables / add_button_selector.xml:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/add_button_selected"/> <item android:state_pressed="true" android:drawable="@drawable/add_button_selected"/> <item android:drawable="@drawable/add_button"/> </selector> 

Res / drawables / add_button.xml:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#da4336" /> </shape> 

Res / drawables / add_button_selected.xml:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#b0372c" /> </shape> 

Explicación:

  • Desde la API 21 puede utilizar el efecto de ondulación:
    Efecto de ondulación
  • Sin embargo, para las versiones anteriores tendrá que seguir con el buen selector de color antiguo

Notas

  • Puede haber una biblioteca de ripple hecha por el usuario para APIs más bajas, que tal vez valga la pena echarle un vistazo
  • Las API más bajas pueden necesitar usar sombra y / o una costumbre dibujable en lugar de elevación, no han probado que ya que no tengo un dispositivo adecuado

Construyo este tipo de botón en mi aplicación usando este código

Código en Fragment.xml

 <Button android:id="@+id/contact_list_add_button" android:layout_width="65dip" android:layout_height="65dip" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginBottom="20dip" android:layout_marginEnd="20dip" android:layout_marginRight="20dip" android:background="@drawable/round_button_shape" android:text="@string/action_plus" android:textColor="@android:color/white" android:textSize="35sp" /> 

Código para drawable (round_button_shape)

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="oval"> <solid android:color="@android:color/transparent"/> <stroke android:width="2dip" android:color="#44aaaaaa"/> <padding android:left="2dip" android:right="2dip" android:top="2dip" android:bottom="2dip" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="@android:color/transparent"/> <stroke android:width="2dip" android:color="#90aaaaaa"/> <padding android:left="2dip" android:right="2dip" android:top="2dip" android:bottom="2dip" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="@android:color/transparent"/> <stroke android:width="2dip" android:color="#ffaaaaaa"/> <padding android:left="1dip" android:right="1dip" android:top="1dip" android:bottom="1dip" /> </shape> </item> <item android:drawable="@drawable/round_shape" android:left="1dip" android:top="1dip" android:right="1dip" android:bottom="1dip"/> </layer-list> 

Código para la forma redonda Dibujable

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

Adicionalmente, recomendaría usar este código dentro de un selector para proporcionar retroalimentación si el usuario interactúa con el botón

He estado usando la siguiente biblioteca para mi aplicación (no soy el autor). Parece que funciona muy bien, se ve como un FAB e incluso se puede conectar fácilmente a un listview para autohide cuando se desplaza hacia abajo. La biblioteca es fácil de agregar a través de grados también. La imagen / animación en la página github hace que el botón parezca de baja calidad, pero no es en la vida real y se ve exactamente como las versiones de google.

https://github.com/makovkastar/FloatingActionButton

  • Cómo importar el recurso de forma (xml) al código?
  • grupo de radio setOnCheckedChangeListener
  • Android: Configurar la altura del botón en XML en función de su ancho
  • Eclipse falta las fichas de diseño gráfico y de origen al editar archivos XML de Android
  • ¿Atajos estáticos del androide para los sabores múltiples?
  • Utilice el cuadro combinado Tema encima del diseño para elegir un diseño diferente o corrija las referencias de estilos del tema
  • Error al inflar XML en el fragmento Google maps
  • Disposición de la pantalla de preferencias de Android
  • GetContentResolver () y getWindow () en un DialogFragment
  • Lectura y escritura de archivos XML
  • Comentarios en Android Layout xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.