¿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?
- Android R.java no generará en Eclipse
- Sombra larga de Android TextView
- Diseño horizontal flexible con `layout_weight` y` maxWidth`
- Barra de herramientas y Fragmento
- Widget de conexión de Android facebook: org.json.JSONException
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:
Una imagen de mi botón actual hasta ahora está abajo:
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>
- Alinear texto en el centro - Spinner
- ¿Cómo maneja el XmlPullParser de Android las vulnerabilidades?
- Prioridad de truncamiento de Android TextView o Resistencia de compresión
- Android paquete / nombre de la clase en la disposición XML?
- Cambiar imagen
- Cómo convertir TextView en ImageView en android
- Escala de un recurso dibujable en XML (Android)
- Android convertir vista XML a mapa de bits sin mostrarlo
Resultado:
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 puedestateListAnimator
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:
- 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.
- Archivo de video no streamable creado con MediaMuxer
- Error: uncaughtException: No se puede leer la propiedad 'sockets' de null de Appium para emulador de Android