25.1.0 La librería de soporte de Android está rompiendo el comportamiento fabuloso

Actualizo a la última versión de la biblioteca de soporte y el comportamiento de desplazamiento FAB no funciona. Cuando se desplaza hacia abajo en un RecyclerView se desplaza correctamente hacia abajo, pero al desplazarse hacia arriba de nuevo no lo es. Queda oculto. La degradación a 25.0.1 parece mitigar este problema. Para referencia aquí es el código que uso para esto.

<android.support.v4.widget.DrawerLayout 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/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" android:fitsSystemWindows="true" tools:context=".mainhost.MainActivity" tools:openDrawer="start"> <android.support.design.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main_coordinator_layout_root_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainhost.MainActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways|snap"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:focusableInTouchMode="true" app:layout_collapseMode="pin" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <!-- Layout for content is here. This can be a RelativeLayout --> <FrameLayout android:id="@+id/content_main" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="-3dp" android:layout_marginRight="-3dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.globyworks.citykey.mainhost.MainActivity" /> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" app:layout_behavior="com.globyworks.citykey.helpers.ScrollingFABBehavior" android:src="@drawable/drawer_new_report_white" /> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/white" app:menu="@menu/menu_drawer"> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout> 

Y la clase de desplazamiento:

  public class ScrollingFABBehavior extends FloatingActionButton.Behavior { public ScrollingFABBehavior(Context context, AttributeSet attrs) { super(); } public boolean onStartNestedScroll(CoordinatorLayout parent, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { return true; } @Override public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { if (dependency instanceof RecyclerView) { return true; } return false; } @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(); } } } 

Actualmente CoordinatorLayout está omitiendo las vistas establecidas en GONE al buscar comportamientos para llamar en su método onNestedScroll .

Una solución rápida aquí es establecer la visibilidad de FAB a INVISIBLE al final de la animación de ocultar FAB .

 if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) { child.hide(new FloatingActionButton.OnVisibilityChangedListener() { @Override public void onHidden(FloatingActionButton fab) { super.onHidden(fab); fab.setVisibility(View.INVISIBLE); } }); } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { child.show(); } 

La costumbre anterior OnVisibilityChangedListener era sólo una parte de la solución para mí. Con la actualización configurando el fab en INVISIBLE, también es necesario actualizar la condición else if en la anulación onNestedScroll () para probar ahora que la visibilidad sea INVISIBLE, en lugar de GONE:

 @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(new FloatingActionButton.OnVisibilityChangedListener() { @Override public void onHidden(FloatingActionButton fab) { super.onHidden(fab); fab.setVisibility(View.INVISIBLE); } }); } else if(dyConsumed < 0 && child.getVisibility() == View.INVISIBLE){ child.show(); } } 

Tengo un poco del mismo problema con el tabview (después de aumentar a 25.1.0) Muestra la primera vez, pero la segunda vez (después de repoblar) llega a ser invisible.

  • El botón de acción flotante no sube cuando la barra de Snack está mostrando en android
  • ¿Cómo puedo conseguir el selector de marcación rápida android fab?
  • Biblioteca de soporte de diseño de Android
  • Menu y Autohide FloatingActionButton de Android Design Support Library
  • Android animateLayoutChanges y flicker anclado fab
  • Establecer FAB (botón de acción flotante) encima del teclado
  • Android No se puede anclar el botón FAB a BottomSheet
  • Android L FAB Botón sombra
  • ¿Cómo replicar el botón de acción flotante Inbox (con texto para cada botón secundario)?
  • Android: Crear un botón de acción flotante más grande con un icono más grande
  • Diseño de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.