解决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()方法:(部分参考代码如下)
6.可以重写布局管理器,线性布局重写LinearLayoutManager和ScrollView嵌套,同理,网格布局重写GridLayoutManager和ScrollView进行嵌套,瀑布流布局重写StaggeredGridLayoutManager和ScrollView进行嵌套
这三种实现可以参考原blog : https://blog.csdn.net/qq_35114086/article/details/53330822
在尝试这六种方法后,前五种方法我都不行(有人可以),我是最后这种重写布局管理器才可以的,在这里就做个小小归纳。
更多相关文章
- Android学习(2)EditView属性
- Android常用布局类整理(一)
- android 常用控件的使用 TextView EditTextView
- android之layout_weight体验(实现按比例显示)
- 从零学Android(八)、Android资源类型之Drawable资源
- Android(安卓)APIDemos 研读之一:android.graphics.Movie
- Android开发学习笔记:TextView的属性详解
- 使用android快速开发框架afinal的FinalDb操作android数据库
- android学习六(android中四种基本布局)