Biblioteca de soporte de diseño de Android FAB en un fragmento ViewPager con diseño de coordinador

Estoy tratando de obtener un botón de acción flotante de la Biblioteca de soporte de diseño de Android dentro de un fragmento que está dentro de un ViewPager. Tengo 4 pestañas y quiero que el FAB en sólo una de las pestañas. Mi diseño es el siguiente:

Main_layout.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:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" app:tabIndicatorHeight="3dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> </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" /> 

List_fragment_with_fab.xml

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:padding="5dip" android:background="@color/Transparent_White" android:fitsSystemWindows="false" android:layout_width="match_parent" android:layout_height="match_parent"> <org.lucasr.twowayview.widget.TwoWayView android:id="@+id/clip_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" app:twowayview_layoutManager="ListLayoutManager" /> <android.support.design.widget.FloatingActionButton android:id="@+id/add_list_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" android:src="@drawable/ic_list_add" app:layout_anchor="@+id/clip_recycler_view" app:layout_anchorGravity="bottom|right|end" /> 

Ahora el problema es que el FAB no funciona según las especificaciones del diseño. Es decir, el esconder y mostrar el fab no funciona. Además, el FAB no está en su lugar inicial cuando el fragmento está activado. He adjuntado capturas de pantalla a continuación para hacerlo más claro.

En la imagen de la izquierda, como se puede ver, el FAB está fuera de la pantalla. Cuando me desplazo, la barra de herramientas se ocultará (piensa en la aplicación Play Store) y las pestañas permanecerán, esa vez el FAB se desplazará hacia arriba.

Introduzca aquí la descripción de la imagen

¿Es esto un error en la biblioteca de soporte de diseño? ¿O mi diseño es incorrecto? Además, quiero que el FAB en sólo uno de los fragmentos, por lo que la adición en el main_layout.xml algo derrotas ese propósito.

One Solution collect form web for “Biblioteca de soporte de diseño de Android FAB en un fragmento ViewPager con diseño de coordinador”

No es estrictamente un error, sino la forma en que lo han implementado.

Es por esto:

 app:layout_behavior="@string/appbar_scrolling_view_behavior" 

Este comportamiento no manipula el tamaño del ViewPager, sólo lo empuja en la parte inferior de la pantalla cuando se expande AppBarLayout.

Su fragmento está llenando el tamaño completo del ViewPager y alinea correctamente el FAB en la parte inferior derecha del contenedor ViewPager; Pero debido a que el contenedor ViewPager está desplazado, la parte inferior derecha está fuera de pantalla.

La forma "correcta" de usar un FloatingActionButton en este contexto es tener la actividad que se muestre:

 <?xml version="1.0" encoding="utf-8"?> <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:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="bubblebearapps.co.uk.nfcapi.MainActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/appbar_padding_top" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/AppTheme.PopupOverlay"> </android.support.v7.widget.Toolbar> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/container" 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_gravity="end|bottom" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" /> </android.support.design.widget.CoordinatorLayout> 

A continuación, cambia el tamaño de FloatingActionButton, icono y onClickBehaviour basado en qué página se muestra en ViewPager utilizando la interfaz OnPageChangeListener .

Para hacer que el flotanteActionButton desplazarse de la parte inferior cuando se escolling el RecyclerView, debe crear un comportamiento! Este es uno que usé en un proyecto diferente:

 public class ScrollOffBottomBehaviour extends CoordinatorLayout.Behavior<View> { private int mViewHeight; private ObjectAnimator mAnimator; public ScrollOffBottomBehaviour(Context context, AttributeSet attrs) { super(); } @Override public boolean onLayoutChild(CoordinatorLayout parent, View child, int layoutDirection) { mViewHeight = child.getHeight(); return super.onLayoutChild(parent, child, layoutDirection); } @Override public void onNestedScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { if(mAnimator == null || !mAnimator.isRunning()){ int totalScroll = (dyConsumed + dyUnconsumed); int targetTranslation = totalScroll > 0 ? mViewHeight : 0; mAnimator = ObjectAnimator.ofFloat(child, "translationY", targetTranslation); mAnimator.start(); } } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) { return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; } } 

Establezca esto en su FloatingActionButton con la aplicación: layout_behaviour y todo debería estar bien …

  • Circular Revelar no funciona cuando la gravedad FAB es inferior
  • Cómo colocar el botón de acción flotante exclusivamente en un fragmento sólo en el diseño de la pestaña
  • Uso de la biblioteca de soporte de diseño en Eclipse
  • Bloqueo de sombra de botón de acción flotante en los márgenes de vista
  • Ocultar FAB en NestedScrollView al desplazarse
  • El margen predeterminado de FloatingActionButton no funciona en lollipop
  • Cómo crear un submenú para el botón de acción flotante en Android Material Design?
  • Null Pointer Exception on child en onMeasure (): futuresimple / floating-action-button
  • Biblioteca de soporte de diseño de Android
  • FloatingActionButton con texto en lugar de imagen
  • Acción flotante Ampliación del botón
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.