with studio icon float example bottom agregar android android-support-library floating-action-button

studio - 25.1.0 soporte para Android lib está rompiendo comportamiento fabuloso



floating action button onclick (3)

Actualmente CoordinatorLayout está omitiendo las vistas configuradas en GONE cuando se buscan comportamientos para llamar en su método onNestedScroll .

Una solución rápida aquí es configurar la visibilidad de FAB a INVISIBLE al final de la animación de ocultación de 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(); }

Actualicé a la última versión de la biblioteca de soporte y el comportamiento de desplazamiento de FAB no funciona. Cuando se desplaza hacia abajo en un RecyclerView, se desplaza hacia abajo correctamente, pero cuando se desplaza hacia arriba de nuevo, no lo es. Se mantiene oculto. La rebaja a 25.0.1 parece mitigar este problema. Para referencia aquí está 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(); } } }


El OnVisibilityChangedListener personalizado anterior fue solo una parte de la solución para mí. Con la actualización configurando el fabuloso como INVISIBLE, también es necesario actualizar la condición else if en el overNide onNestedScroll () para probar 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 la vista de tabulación (después de actualizar a 25.1.0) Se muestra la primera vez, pero la segunda vez (después de la repoblación) se vuelve invisible.