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 …

  • Botón de acción flotante en una actividad - ¿cómo anclar a una vista de reciclaje en un fragmento?
  • FloatingActionButton no ocultar
  • Android setBackgroundTintList en los dispositivos pre-lollipop
  • El botón de acción flotante aparece sobre el cajón de navegación
  • Cómo agregar el botón de acción flotante en la parte superior de scrollview
  • Color FAB para el fondo No cambia en los dispositivos de versión de Gingerbread
  • Cómo eliminar la sombra circundante FloatingActionButton?
  • Uso de la biblioteca de soporte de diseño en Eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.