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.

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> 

¿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í:

https://guides.codepath.com/android/Floating-Action-Buttons

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

  • La fila de RecyclerView está barajando y cambiando Imágenes: android
  • No puedo compilar mi proyecto android
  • Recuperando onBindViewHolder al desplazarse por la vista Recycler
  • Desplazamiento horizontal múltiple de RecyclerView
  • RecyclerVista el espacio entre los elementos que se expanden al desplazarse
  • Comportamiento extraño de RecyclerView después de eliminar el elemento
  • Establecer margen en RecyclerView mediante programación
  • La vista de Recycler no se desplaza correctamente después de implementar el desplazamiento para actualizar el diseño.
  • Los elementos no tienen el mismo ancho cuando se utiliza RecyclerView GridLayoutManager para establecer el espaciado de columnas por ItemDecoration
  • Cómo refundir elementos en un RecyclerView con el StaggeredGridLayoutManager
  • RecyclerView onItemClicked devolución de llamada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.