RecyclerView 空白区域点击无效的问题
最近在开发一个聊天的功能,要求点击空白区域控制底部工具栏的可见性,但是直接调用 recyclerView.setOnClickListener()
没有效果,于是
![](https://rmb.ee/wp-content/uploads/2022/05/d2b5ca33-bd97-0f64-a630-1fa75ae2eb22.jpg)
我们在 RecyclerView
源码中发现它重写了 onTouchEvent()
但却没有处理自身的点击事件(一般会有 performClick()
)
![](https://rmb.ee/wp-content/uploads/2022/05/d2b5ca33-bd97-0f64-a630-1fa75ae2eb22-1.png)
所以我们需要自己添加触摸监听(RecyclerView没有重写 dispatchTouchEvent()
,所以 setOnTouchListener
使用的还是父级的 ),我们可以在这里进行点击事件的判断
binding.recyclerView.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
rvScrollX = event.x
rvScrollY = event.y
} else if (event.action == MotionEvent.ACTION_UP) {
if (v.id != 0 && (rvScrollX - event.x).absoluteValue <= 5) {
// 这个时候我们认为它是点击
// 执行点击的操作
}
}
false
}