问题
意外发现的一个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方法跟这俩属性相关的代码一句都没有,其他方法和触摸事件也是八竿子打不着的关系,有时间再看看吧。
解决
-
需要显示省略号(…),最多显示一行
保留singleLine,删除gravity,在外加一层ViewGroup处理Gravity。
需要显示省略号(…),最多不是显示一行
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:maxLines="2"
android:ellipsize="middle"/>
-
不需要显示省略号(…)
直接删除singleLine即可。