Me gustaría crear un botón de acción flotante (para agregar elementos a una vista de lista), como el calendario de Google, manteniendo la compatibilidad con las versiones de Android anteriores a Lollipop (antes de la 5.0).
Creé este diseño:
Actividad main_activity.xml:
<LinearLayout ... >
<include
layout="@layout/toolbar"/>
<RelativeLayout ... >
<!-- My rest of the layout -->
<!-- Floating action button -->
<ImageButton style="@style/AppTheme"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="New Button"
android:id="@+id/button"
android:src="@drawable/ic_fab"
android:background="@drawable/fab"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="24dp"
android:layout_marginRight="24dp"/>
</RelativeLayout>
</LinearLayout>
Fab.xml dibujable:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#ffa48bc0"/>
</shape>
Style styles.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">#ff1d79b1</item>
<item name="colorPrimaryDark">#ff084d95</item>
</style>
</resources>
El resultado es similar, pero no existe el sombreado, una característica del diseño de materiales:
Botón de acción flotante del calendario:
Botón de acción flotante de mi aplicación:
¿Cómo puedo agregar el sombreado a mi botón?
Ya usé el atributo elevación, pero no funciona
Respuestas:
Ya no es necesario crear su propia FAB ni utilizar una biblioteca de terceros, se incluyó en AppCompat 22.
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Simplemente agregue la nueva biblioteca de soporte llamada diseño en su archivo gradle:
... y listo:
<android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_margin="16dp" android:clickable="true" android:src="@drawable/ic_happy_image" />
fuente
The background color of this view defaults to the your theme's colorAccent. If you wish to change this at runtime then you can do so via setBackgroundTintList(ColorStateList).
Por lo general, he usado elementos de diseño xml para crear sombras / elevaciones en un widget previo a la piruleta. Aquí, por ejemplo, hay un dibujable xml que se puede usar en dispositivos pre-piruletas para simular la elevación del botón de acción flotante.
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="8px"> <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="?attr/colorPrimary"/> </shape> </item> </layer-list>
En lugar de
?attr/colorPrimary
puede elegir cualquier color. Aquí hay una captura de pantalla del resultado:fuente
Hay un montón de bibliotecas que agregan un FAB (botón de acción flotante) en su aplicación, aquí hay algunas que conozco.
FAB de makovkastar
FAB compuesto de futuersimple
Biblioteca de Material Design que también incluye FAB
Todas estas bibliotecas son compatibles con dispositivos pre-lollipop, mínimo hasta api 8
fuente
Aquí hay una biblioteca de botones de acción flotante gratuita adicional para Android. Tiene muchas personalizaciones y requiere la versión 9 del SDK o superior.
Video de demostración completo
fuente
El código xml de @Justin Pollard funciona muy bien. Como nota al margen, puede agregar un efecto dominó con las siguientes líneas xml.
<item> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight" > <item android:id="@android:id/mask"> <shape android:shape="oval" > <solid android:color="#FFBB00" /> </shape> </item> <item> <shape android:shape="oval" > <solid android:color="@color/ColorPrimary" /> </shape> </item> </ripple> </item>
fuente
Pruebe esta biblioteca , admite sombra, existe
minSdkVersion=7
y también admiteandroid:elevation
atributosAPI-21
implícitamente.La publicación original está aquí .
fuente
Agregue relleno y elevación:
fuente