在安卓开发中,当一个clickable为true的ViewGroup控件包含了一个HorizontalScrollView的时候,点击HorizontalScrollView的位置既不能响应ViewGroup控件的点击事件,当然也不能使ViewGroup控件设置的selector背景变色,经典的用法是 Adapter View 的 item中包含一个HorizontalScrollView,item的点击就不能响应,必须点除了HorizontalScrollView的别的位置,很不友好。
因为HorizontalScrollView将事件的很多动作都拦截消耗掉了,包括但不限于:
MotionEvent.ACTION_DOWN
MotionEvent.ACTION_MOVE
MotionEvent.ACTION_UP
MotionEvent.ACTION_CANCEL
其中一般点击事件需要响应的三个动作DOWN、UP、CANCEL全被拦截掉了,如何解决呢?
遇事不决问百度,百度不决问谷歌。网上提供了一种方法,就是给包含HorizontalScrollView的父控件设置android:descendantFocusability属性,值有三个选择:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦