在Scroll上隐藏/显示bottomNavigationView

我必须在向上滚动时隐藏底部导航视图并在向下滚动时显示。如何实现此function? 我的布局是这样的

       

我附上了视图的截图。 请检查一下。

在此处输入图像描述

您需要一个帮助程序类才能执行此操作。此解决方案的工作方式与Google Material Design Guide相同。

创建一个类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); } } 

要使用此行为,您需要使用cooradinator布局...

            

将此代码添加到包含底部导航的Activity中。

 mBottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav); CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mBottomNavigationView.getLayoutParams(); layoutParams.setBehavior(new BottomNavigationViewBehavior()); 

尝试这个,

  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); } }); 

向上滚动图像: -

点击这里滚动图像

向下滚动图像:

单击此处向下滚动图像

用这个

 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); } }); 

最新库更新后更新的答案:

在滚动中隐藏BottomNavigationView现在可以在布局中只有一个标志! 从版本28.0.0-alpha1或材质/ androidX 1.0.0-alpha1

我使用后一种方法更新了我的项目,因为版本现在是稳定版本候选版本"1.0.0-rc01"

新的开箱即用行为称为HideBottomViewOnScrollBehavior 。 将它设置在BottomNavigationView作为app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior" ,如最新文档中所述 。

这是一个完整的例子:

  

与在滚动时隐藏工具栏一样,您必须确保内容是支持最新滚动的类,如RecyclerViewNestedScrollView

这确保所有工作正如设计规范中的animation所示

PS: labelVisibilityMode是另一个很酷的补充,你可以免费获得更新的麻烦,这在设计规范中有详细描述。

当我在上方滚动recylerview。 在此处输入图像描述