禁止AppBarLayout滚动

前言

通过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没有数据的时候禁止滑动,有数据的时候恢复滑动。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值