触摸TextView时ViewPager滑动失效的问题排查

问题

意外发现的一个bug,当手指先触摸ViewPager页面中的TextView时,左右滑动页面,ViewPager左右切换失效了,说明触摸事件被TextView提前消费了,ViewPager自身的onTouchEvent接收不到子View的触摸事件回传,导致的不能滑动。通过各种方式排查,得出原因:

原因

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:singleLine="true"
    android:ellipsize="middle"/>

原因就是singleLine和gravity两个属性同时使用引起的,单独删了其中一个就没问题了。

为什么?不要问我为什么,看了好久的TextView源码也没看出个所以然来,因为TextView中复写的onTouchEvent方法跟这俩属性相关的代码一句都没有,其他方法和触摸事件也是八竿子打不着的关系,有时间再看看吧。

解决

  1. 需要显示省略号(…),最多显示一行

    保留singleLine,删除gravity,在外加一层ViewGroup处理Gravity。

  2. 需要显示省略号(…),最多不是显示一行

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:maxLines="2"
    android:ellipsize="middle"/>
  1. 不需要显示省略号(…)

    直接删除singleLine即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。