Tengo que ocultar la vista de navegación inferior en desplazamiento ascendente y mostrar en desplazamiento hacia abajo. ¿Cómo implementar esto? mi diseño es así
He adjuntado una captura de pantalla de vista. Por favor verifíquelo.
ACTUALIZAR
Actualice a la versión más reciente de la biblioteca de soporte 28.0.0-alpha1
y simplemente agregue un atributo a BottomNavigationView
.
Nota : – Su XML debe seguir la estructura de XML dada a continuación en la respuesta anterior.
ANTIGUA RESPUESTA (todavía funciona)
Necesita una clase de ayuda para hacer esto. Esta solución funciona como la Guía de diseño de materiales de Google.
Crear una clase BottomNavigationViewBehavior
public class BottomNavigationViewBehavior extends CoordinatorLayout.Behavior { private int height; @Override public boolean onLayoutChild(CoordinatorLayout parent, BottomNavigationView child, int layoutDirection) { height = child.getHeight(); return super.onLayoutChild(parent, child, layoutDirection); } @Override public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, BottomNavigationView child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) { return axes == ViewCompat.SCROLL_AXIS_VERTICAL; } @Override public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull BottomNavigationView child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, @ViewCompat.NestedScrollType int type) { if (dyConsumed > 0) { slideDown(child); } else if (dyConsumed < 0) { slideUp(child); } } private void slideUp(BottomNavigationView child) { child.clearAnimation(); child.animate().translationY(0).setDuration(200); } private void slideDown(BottomNavigationView child) { child.clearAnimation(); child.animate().translationY(height).setDuration(200); } }
Para usar este comportamiento, debe usar el diseño de cooradinator ...
Agregue este código a su actividad que contiene el navegador inferior ..
mBottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav); CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mBottomNavigationView.getLayoutParams(); layoutParams.setBehavior(new BottomNavigationViewBehavior());
Prueba esto,
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (dy > 0 && bottom_navigation.isShown()) { bottom_navigation.setVisibility(View.GONE); } else if (dy < 0 ) { bottom_navigation.setVisibility(View.VISIBLE); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } });
Imagen mientras se desplaza hacia arriba: -
Imagen mientras se desplaza hacia abajo:
Utilizar esta
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (dy > 0 ||dy<0 && csButtonLay.isShown()) { bottomBar.setVisibility(View.GONE); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (newState == RecyclerView.SCROLL_STATE_IDLE) { bottomBar.setVisibility(View.VISIBLE); } super.onScrollStateChanged(recyclerView, newState); } });
Respuesta actualizada después de las últimas actualizaciones de la biblioteca :
¡ BottomNavigationView
la BottomNavigationView
de BottomNavigationView
ahora está disponible con solo una bandera en el diseño! A partir de la versión 28.0.0-alpha1
o del material / androidX 1.0.0-alpha1
.
Actualicé mi proyecto utilizando el último enfoque ya que la versión ahora está en la versión candidata de lanzamiento estable "1.0.0-rc01"
.
El nuevo comportamiento disponible fuera de la caja se llama HideBottomViewOnScrollBehavior
. BottomNavigationView
en la app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
BottomNavigationView
como app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
como se describe en los últimos documentos .
Aquí hay un ejemplo completo:
Al igual que con la ocultación de la Barra de herramientas al desplazarse, debe asegurarse de que el contenido sea una clase que admita el desplazamiento más reciente, como RecyclerView
y NestedScrollView
.
Esto asegura que todo está funcionando como se muestra en la animación en las especificaciones de diseño
PD: labelVisibilityMode
es otra adición interesante que obtienes de forma gratuita por tomarse la molestia de actualizar y que se describe en profundidad en las especificaciones de diseño .
Cuando estoy scrolllerlerview en el lado superior.