2013-03-18 49 views
12

我有一个ViewPager包含两个片段。在任何片段中,我都可以触摸某个地方,轻扫以切换到另一个片段fragment。其中一个片段包含一个列表。列表中的项目包含一个TextView和一个ImageView。问题是,如果您从点击ImageView开始拖动,则无问题。但是如果它来自TextView,那么ViewPager永远不会知道阻力,因此“顺利切换”从未发生过。ViewPager中的TextView拦截触摸事件

任何线索?

编辑

这张照片是显示我的GUI是如何。如果拖动从TextViewE开始,它不会开始。 enter image description here

+1

你应该发布一些代码。对'ViewView'重写'TextView'没有什么特别之处。 – adneal

+1

@aneal看看图片是否能更好地解释我的想法 – tactoth

+0

这让我感到非常沮丧,我也很乐意看到答案。 TextView在ListView拦截触摸中,ViewPager变得几乎不可用。 – pechenie

回答

35

这件事困扰我太多,但我已经成功地找到了答案。

基本上,情况是:如果视图可以水平滚动,则拦截水平运动事件,并且ViewPager不能再处理它。

由于API级别14 TextViews具有机器人:scrollHorizo​​ntally属性(和setHorizo​​ntallyScrolling(布尔值)方法),其中,如果设置为true,使TextView的拦截水平滚动运动的事件。

你可以将它设置为false,无论是在XML或右边的代码,但注意安卓SINGLELINE属性力量安卓scrollHorizo​​ntally设置为非常棘手的问题点!但幸运的是,您通常能够安全地用安全地替换单行属性android:maxLines =“1”和必要的ellipsize值。

祝你好运!

+1

发现相同的问题,并发现删除singleLine语句解决。刚发现为什么:D。谢谢! –

+0

很抱歉忘记检查答案很快。非常好。 – tactoth

+0

如果我想将选框设置为文本视图,我需要将singleLine设置为true。有什么办法可以避免它,并启用选框? – berserk

0

可以TextView的覆盖的的onTouchEvent():

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_MOVE) { 
     return false; 
    } 

    return super.onTouchEvent(event); 
} 
相关问题