【发布时间】:2017-04-06 05:24:59
【问题描述】:
如何为BottomNavigationView 定义一个CoordinatorLayout.Behavior 类,该类的滚动与 RecyclerView 垂直滚动同步。
我见过this 和this,但它所做的只是立即在垂直滚动事件上显示/隐藏NavigationView。我不想立即显示/隐藏NavigationView,而是我想要一个类似于AppbarLayout 的行为,它有一个Toolbar,滚动标志为app:layout_scrollFlags="scroll|enterAlways"。
public class BottomNavigationBehavior extends CoordinatorLayout.Behavior<BottomNavigationView> {
public BottomNavigationBehavior() {
super();
}
public BottomNavigationBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, BottomNavigationView child, View dependency) {
boolean dependsOn = dependency instanceof FrameLayout;
return dependsOn;
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, BottomNavigationView child, View directTargetChild, View target, int nestedScrollAxes) {
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;
}
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, BottomNavigationView child, View target, int dx, int dy, int[] consumed) {
if(dy < 0) {
showBottomNavigationView(child);
}
else if(dy > 0) {
hideBottomNavigationView(child);
}
}
private void hideBottomNavigationView(BottomNavigationView view) {
view.animate().translationY(view.getHeight());
}
private void showBottomNavigationView(BottomNavigationView view) {
view.animate().translationY(0);
}
}
【问题讨论】:
-
我会尝试设置对 appbarlayout 的依赖,并根据 appbarlayout 的高度变化移动 BottomNavigationBar
-
我的意思是,我想实现一个布局行为,就像响应 RecyclerView 滚动事件的 appbar 布局行为一样
-
所以慢慢地使用回收站视图而不是不显示它?
-
是的,没错。带有带有“scroll|enterAlways”标志的工具栏的 Appbarlayout 就是这种滚动的一个示例。
标签: android android-coordinatorlayout android-design-library android-bottom-nav-view