ViewPager里面的TextView拦截触摸事件
Posted
技术标签:
【中文标题】ViewPager里面的TextView拦截触摸事件【英文标题】:TextView inside ViewPager intercepts touch events 【发布时间】:2013-03-18 06:16:08 【问题描述】:我有一个包含两个片段的ViewPager
。在我可以触摸的任何片段中,滑动以切换到另一个fragment
。其中一个片段包含一个列表。列表中的项目包含一个TextView
和一个ImageView
。问题是,如果您从点击ImageView
开始拖动,就可以了。但如果它来自TextView
,则ViewPager
永远不会知道拖动,因此“平滑切换”永远不会发生。
这有什么线索吗?
编辑
这张图是为了展示我的 GUI 是怎样的。如果拖动是从 TextViewE 开始的,它不会开始。
【问题讨论】:
你应该发布一些代码。覆盖ViewPager
的TextView
没有什么特别之处。
@aneal 看看图片是否更好地解释了我的想法
这让我很烦恼,我也很高兴看到答案。 TextView 里面的 ListView 拦截触摸,ViewPager 变得几乎不能用了。
手工图片+1!
【参考方案1】:
这件事也困扰着我,但我已经找到了答案。
基本上,情况是:如果视图可以水平滚动,它会拦截水平运动事件,ViewPager不能再处理它了。
由于 API 级别 14 TextViews 具有 android:scrollHorizontally 属性(和 setHorizontallyScrolling(boolean) 方法),如果设置为 true,导致 TextView 拦截水平滚动运动事件。
您可以在 XML 中或直接在代码中将其设置为 false,但 注意:android:singleLine 属性强制 android:scrollHorizontally 设置为 true! 非常棘手的一点!但幸运的是,您通常可以安全地将单行属性替换为 android:maxLines="1" 和必要的 ellipsize 值。
祝你好运!
【讨论】:
发现了同样的问题,发现去掉singleLine语句就解决了。刚刚发现原因:D。谢谢! 如果我想为文本视图设置选框,我需要将 singleLine 设置为 true。有什么办法可以避免它并启用选取框吗? 哇,过去 1.5 天我一直在试图确定为什么我的 ViewPager 偶尔没有滚动,即使我可以看到它的触摸事件触发。这个答案救了我。原来我有一个带有singleLine=true
的TextView,这将停止ViewPager 滚动。由于 TextView 本身是一个非常大的视图,因此用户在该视图上尝试拖动的机会非常高 - 因此没有滚动。删除singleLine
是最终解决方案。再次感谢!
android:maxLines="1" 为我工作,因为我需要设置椭圆大小。感谢您的回答。
这让我获得了大部分解决方案,但我发现除了 android:scrollHorizontally 之外,我还需要将我的文本视图设置为宽度的“match_parent”而不是“wrap_content”。 【参考方案2】:
您可以覆盖 TextView 的 onTouchEvent():
@Override
public boolean onTouchEvent(MotionEvent event)
if (event.getAction() == MotionEvent.ACTION_MOVE)
return false;
return super.onTouchEvent(event);
【讨论】:
以上是关于ViewPager里面的TextView拦截触摸事件的主要内容,如果未能解决你的问题,请参考以下文章