前言
通过CoordinatorLayout与AppBarLayout,可以做一系列滑动骚操作,但是今天遇到了一个问题,recycleview(外面套了SwipeRefreshLayout)没数据的时候,AppBarLayou包裹的view还能滑动。
解决思路
1.gone掉下方的recycleview;
2.禁止掉AppBarLayout子view的behavior;
3.禁止AppBarLayout子view滑动。
解决
1.经研究,把SwipeRefreshLayout去掉仅剩recycleview(或者让SwipeRefreshLayout Gone掉)后,滑动下方recycleview所在空白区域,上方AppBarLayout不会滚动。但是。。。。很绝望的发现,此时去滑动上方AppBarLayout所在区域,竟然还可以滑动上方AppBarLayout,甚至大力一划,划出了屏幕,划不回来了。
经实践下方是NetScrollView,且内容没有覆盖整个屏幕,此时滑动NetScrollView所在区域,AppBarLayout不会滚动。但是去滑动AppBarLayout所在区域,AppBarLayout还是会滚动。
所以还得试一下剩下的2个方法。
2.网上查找了一通,禁掉了AppBarLayout的behavior,绝望的发现报空指针了。猛的一顿分析,behavior我们是写在AppBarLayout的子view中的,报空不是很正常吗?
3.
经验证,这么设置之后,AppBarLayout就无法滑动
View mAppBarChildAt = mAppBarLayout.getChildAt(0);
AppBarLayout.LayoutParams mAppBarParams = (AppBarLayout.LayoutParams) mAppBarChildAt.getLayoutParams();
mAppBarParams.setScrollFlags(0);
这么设置就可以恢复滑动(ScrollFlag有多种,可以根据需要自己设置,下方的对于xml中的silas:layout_scrollFlags=”scroll|enterAlways”)
mAppBarParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
mAppBarChildAt.setLayoutParams(mAppBarParams);
那么我们就可以在recycleview没有数据的时候禁止滑动,有数据的时候恢复滑动。