studio personalizar icono hacer flotante example como boton bar agregar android material-design floating-action-button

icono - personalizar toolbar android studio



Dos botones flotantes en un diseƱo. (5)

Estoy creando una aplicación sencilla con el uso de diseño de materiales. Y quiero tener dos botones flotantes en un diseño.

Y quiero hacer que se muevan juntos cuando se muestra un snack bar. Pero no puedo hacer esto mal, de la manera correcta, porque layout_margin no funciona. Estas son la captura de pantalla de la aplicación y el marcado. ¿Usted me podría ayudar?

<android.support.design.widget.AppBarLayout android:id="@+id/addProductsAppBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.TabLayout android:id="@+id/addProductsTabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/addProductsViewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton android:id="@+id/addProductFab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/ic_add_white_36dp" /> <android.support.design.widget.FloatingActionButton android:id="@+id/searchFab" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_anchor="@id/addProductFab" app:layout_anchorGravity="top|right|end" android:layout_marginBottom="80dp" android:layout_marginRight="16dp" android:src="@drawable/ic_search_white_36dp"/> </android.support.design.widget.CoordinatorLayout>


Con el código de respuesta correcto no funcionará en Android por debajo de 5.0, ya que la FAB superior cambiará. Sobre todo, en su código de muchos atributos adicionales, escribiré la respuesta a continuación, en función de la suya, que funcionará correctamente en todos los dispositivos y será más fácil de entender.

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:background="#e2022068"> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:src="@android:drawable/arrow_down_float" /> <ImageView android:id="@+id/divider" android:layout_width="1dp" android:layout_height="40dp" app:layout_anchor="@id/fab_down" app:layout_anchorGravity="end" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end" android:src="@android:drawable/arrow_up_float" app:layout_anchor="@id/divider" app:layout_anchorGravity="right|end" /> </android.support.design.widget.CoordinatorLayout>


En la biblioteca de soporte, versión 24.2.0, el CoordinatorLayout tiene un nuevo atributo layout_dodgeInsetEdges que puedes agregar a LinearLayout (o cualquier otra vista, que contiene) tus dos FAB, ¡y Snackbar moverá esa vista completa del camino!

Así por ejemplo:

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false" android:fitsSystemWindows="true" tools:context=".Activities.MainActivity"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="bottom|right" android:layout_marginRight="@dimen/fab_margin" android:layout_marginBottom="@dimen/fab_margin" app:layout_dodgeInsetEdges="bottom"> //THIS IS THE LINE THAT MATTERS <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/fab_margin" android:src="@drawable/icon" android:tint="@color/colorTextAndIcons" app:backgroundTint="@color/colorPrimary"/> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/fab_margin" android:src="@drawable/icon" android:tint="@color/colorTextAndIcons" app:backgroundTint="@color/colorPrimary"/> </LinearLayout> </android.support.design.widget.CoordinatorLayout>


Intenté algunos ajustes con su código para que funcionara y en el proceso he adquirido cierta comprensión sobre el funcionamiento de los anclajes.

Lo primero que hay que notar es que el CoordinatorLayout alinea sus vistas secundarias en función de los bordes de la vista. Así que agregar margen entre elementos no ayudaría en absoluto en movimiento. Se verá bien en el diseño, pero ceder en movimiento.

Por lo tanto, agregar una vista ficticia ayuda a anclar correctamente sin problemas. Además, necesitas configurar apropiadamente el layout_gravities.

Simplemente reemplace el código de los 2 FAB en su diseño con este fragmento de código:

<android.support.design.widget.FloatingActionButton android:id="@+id/addProductFab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="16dp" android:src="@drawable/ic_add_white_36dp" /> <View android:id="@+id/dummy" android:layout_width="1dp" android:layout_height="16dp" app:layout_anchor="@id/addProductFab" app:layout_anchorGravity="top|right|end" /> <android.support.design.widget.FloatingActionButton android:id="@+id/searchFab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|top" android:layout_margin="16dp" android:src="@drawable/ic_search_white_36dp" app:layout_anchor="@id/dummy" app:layout_anchorGravity="top|right|end" />

¡Espero que esto ayude! Por favor acepte esta respuesta si funciona. :)


La solución marcada como correcta es una modificación hecha, que se emitirá para diferentes dispositivos con diferentes ppp de pantalla, por lo que la solución correcta será https://.com/a/33900363/5740236


No me gustó agregar una vista solo para agregar el relleno, en lugar de eso envolví el Fab en un FrameLayout:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_directions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/fab_margin" android:src="@android:drawable/ic_menu_directions" android:visibility="gone"/> <!-- We need the frame layout to set the margin between FABs--> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|end" app:layout_anchor="@id/fab_directions" app:layout_anchorGravity="top|end"> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/fab_margin" android:layout_marginEnd="@dimen/fab_margin" android:src="@android:drawable/ic_menu_search" app:elevation="@dimen/fab_elevation"/> </FrameLayout> </android.support.design.widget.CoordinatorLayout>