解决ScrollView中嵌套RecyclerVIew产生滑动冲突问题

实现某个功能时发现RecyclerView总是先获取焦点,然后在ScrollView中滑动,为了让ScrollVoiew先滑动,我尝试了网上一些博客所说的方法,有些博主能成功,而我的却啊还是不行,具体列出尝试的几种方法:

1. 在ScrollView中添加属性(已经设有属性android:fillViewport="true"):

android:focusable="true"

android:focusableInTouchMode="true"

2.给RecyclerView添加外布局,RelativeLayout,并且设置属性:

android:descendantFocusability="blocksDescendants"

3.在ScrollView中添加属性:

android:descendantFocusability="beforeDescendants"

#这里顺带提一下  android:descendantFocusability="blocksDescendants",该属性是当一个View获取焦点时,定义ViewGroup与子控件直接的关系,常用来解决父控件的焦点或者点击事件被子控件获取,属性值有三种:

1)beforeDescendants  :ViewGroup先于子控件获取焦点;

2)afterDescendants:    ViewGroup只有当子控件不需要获取焦点时获取焦点;

3)blocksDescendants: ViewGroup会覆盖子控件而直接获取焦点。

 

4.在使用ScrollView的xml文件中,使用android.support.v4.widget.NestedScrollView代替ScrollView,并且给RecyclerView设置属性.setNestedScrollingEnabled(false)属性;

5.重写父控件,让其直接拦截滑动事件,不向下分发给RecyclerView,具体是重定义ScrollView子类,继承ScrollView,重写其onInterceptTouchEvent()方法:(部分参考代码如下)

解决ScrollView中嵌套RecyclerVIew产生滑动冲突问题_第1张图片

6.可以重写布局管理器,线性布局重写LinearLayoutManager和ScrollView嵌套,同理,网格布局重写GridLayoutManager和ScrollView进行嵌套,瀑布流布局重写StaggeredGridLayoutManager和ScrollView进行嵌套

这三种实现可以参考原blog : https://blog.csdn.net/qq_35114086/article/details/53330822

在尝试这六种方法后,前五种方法我都不行(有人可以),我是最后这种重写布局管理器才可以的,在这里就做个小小归纳。

 

你可能感兴趣的:(android)