作者:ID张蕾 | 来源:互联网 | 2023-09-18 17:05
我的问题是在CoordinatorLayout中再嵌套一个CoordinatorLayout,两个都有自定义Behavior并都重写onStartNestedScroll的时候,只能监听到子Co
我的问题是在CoordinatorLayout中再嵌套一个CoordinatorLayout,两个都有自定义Behavior并都重写onStartNestedScroll的时候,只能监听到子CoordinatorLayout的滑动,也就是只执行了子CoordinatorLayout的自定义Behavior。
我的主布局是CoordinatorLayout,之中嵌套了一个ViewPager,以及toolbar和底部tab
在ViewPager的第一个Fragment中有一个RecyclerView和一个在此列表之上的一个LinerLayout
现在我利用自定义Behavior已经实现下滑动列表的时候,toolbar和底部tab都消失到屏幕外,上滑的时候回来
而我的第一个Fragment之中,那个LinerLayout也想利用Behavior来监听列表滑动并减小自己的高度,
因为CoordinatorLayout的自定义Behavior只能对直接子View有效,所以我想将Fragment的主布局设置为coordinatorlayout
现在问题来了,自定义Behavior的onStartNestedScroll函数返回true的时候,toolbar和底部tab就检测不到滑动了
目前尝试的方法有
将该LinerLayout包裹在AppBarLayout中,并设置RecyclerView的Behavior为appbar_scrolling_view_behavior
结果是toolbar和Tab都不会隐藏了
自己定义Behavior,重写onStartNestedScroll函数并返回true后,外部toolbar和Tab都不会隐藏了
主布局的Behavior,可以隐藏和显示tab
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
if (child.getVisibility() == View.VISIBLE && viewY == 0) {
viewY = coordinatorLayout.getHeight() - child.getY();
}
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;//判断是否竖直滚动
}
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
if (dy >=0&&!isAnimate&&child.getVisibility()==View.VISIBLE) {
//隐藏的动画
} else if (dy <0&&!isAnimate&&child.getVisibility()==View.GONE) {
//显示动画
}
} |
ViewPager中首个Fragment的布局自定义Behavior
测试的时候仅仅只将onStartNestedScroll函数返回true就发现外部的toolbar和tab都不会隐藏了
不知是不是因为CoordinatorLayout不能嵌套,还是我应该在子CoordinatorLayout在进行一次判断?该如何判断呢?
还是说要实现这种效果,就不能考虑两个CoordinatorLayout嵌套?