Botón de acción flotante en una actividad – ¿cómo anclar a una vista de reciclaje en un fragmento?
Tuve el mismo problema en esta pregunta Floating Action Button que no se muestra completamente dentro de un fragmento
Tengo un tablayout en mi activity_main y 2 tabs (con diferentes fragmentos, uno de ellos contiene un recyclerView). Cuando puse el FAB en el fragmento, el FAB no se mostró completamente hasta que me deslicé por el recyclerView.
- Estilo de RecyclerView a nivel de tema
- HorizontalGridView / RecyclerLa posición de desplazamiento se restablece una vez que la imagen de Picasso se carga
- Expanda CardView dentro de RecyclerView como nueva actividad como Inbox de Google Android
- RecyclerView no se desinscribe del adaptador en el cambio de orientación
- Android: Añadir divisor entre los elementos de RecyclerView
Por lo tanto, moví mi FAB en el archivo activity_main.xml en el widget coordinator_layout como se sugiere en la pregunta vinculada y funciona bien.
De esta manera tengo un FAB en la actividad y no en el fragmento y me gustaría saber cómo anclar, por ejemplo, mi fab para la recyclerview en el fragmento, por ejemplo, para que se animen durante el pergamino reciclador?
Ahora activity_main.xml con un tablayout:
Activity_main.xml
<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.support.design.widget.AppBarLayout android:id="@+id/appbarlayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar1" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" android:background="?attr/colorPrimary" /> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/toolbar1" android:background="?attr/colorPrimary" android:scrollbars="horizontal" app:tabMode="scrollable" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" 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/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_gravity="bottom|right" android:layout_marginBottom="20dp" android:layout_marginRight="20dp" android:src="@drawable/ic_action_location_found" app:fabSize="normal" /> </android.support.design.widget.CoordinatorLayout>
Fragmento.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="@dimen/activity_vertical_margin" > <android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/start_button" android:scrollbars="vertical" /> </RelativeLayout>
- Reciclado horizontal con bordes de decoloración
- El desplazamiento de ViewPager no funciona con RecyclerView
- Datos de carga de Firebase dinámicamente en desplazamiento
- Animación de transición de llamada desde RecyclerView Adapter en lugar de Actividad
- Aplicación android de Gmail como vista de lista con una letra en el icono
- Marshmallow (23) + RecyclerView (23.1.0) el desplazamiento desordena el contenido de arriba después de eliminar el elemento (notifyItemRemoved)
- StaggeredGridLayoutManager y elementos en movimiento
- Recylerview no visible dentro de scrollview o nestedScrollview
¿Ha intentado anclarlo al viewpager?
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" app:layout_anchor="@id/viewpager" app:layout_anchorGravity="bottom|right|end" </android.support.design.widget.CoordinatorLayout>
A continuación, ampliar un FloatingActionButton.Behavior
para responder a eventos CoordinatorLayout:
public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { super(); } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); } @Override public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) { child.hide(); } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { child.show(); } } }
Y agrega esto a tu FloatingButton:
app:layout_behavior="com.package.yourapp.ScrollAwareFABBehavior"
Está bien explicado aquí:
Complementando la respuesta de @ petrusgome :
La solución de suministro no funcionó para mí. Tuve un problema en el que el FAB no volvería a mostrarse después de desplazar la lista de reciclaje. Para solucionarlo, tuve que reemplazar child.hide()
con el siguiente código:
child.hide(new FloatingActionButton.OnVisibilityChangedListener() { @Override public void onHidden(FloatingActionButton fab) { super.onHidden(fab); fab.setVisibility(View.INVISIBLE); } });
La explicación completa se puede encontrar aquí: tema de desplazamiento