实现某个功能时发现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

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

 

更多相关文章

  1. Android学习(2)EditView属性
  2. Android常用布局类整理(一)
  3. android 常用控件的使用 TextView EditTextView
  4. android之layout_weight体验(实现按比例显示)
  5. 从零学Android(八)、Android资源类型之Drawable资源
  6. Android(安卓)APIDemos 研读之一:android.graphics.Movie
  7. Android开发学习笔记:TextView的属性详解
  8. 使用android快速开发框架afinal的FinalDb操作android数据库
  9. android学习六(android中四种基本布局)

随机推荐

  1. 第104天: Python 解析 XML
  2. 学java有什么技巧?
  3. crontab 拨号 不生效
  4. crmeb pro单商户iview vue后台前端用node
  5. 区块链挖矿是什么意思?区块链怎么挖矿的?
  6. npm install 出现npm ERR! cb() never ca
  7. Oracle OCP 071【中文题库】考试题-第19
  8. 盘点2021年最为流行的七个数据建模工具
  9. Python中的3D绘图命令
  10. 【JS基础入门】JavaScript中创建对象的7