OnTouchListener不能用于相对布局

我有一个RelativeLayout ,我在其中dynamic添加许多TextViews 。 我面对的问题是,每当我单独应用一个onTouch侦听器的TextViews ,它检测到触摸,但是当我添加触摸到我的相对布局,它从来没有响应。

这段代码检测触摸事件就好了:

 TextView tv = new TextView(this); tv.setText(values[i]); Drawable d = getResources().getDrawable(R.drawable.level_small_corners); tv.setClickable(true); tv.setId(i+1); tv.setTextSize(18); tv.setOnTouchListener(cellTouch); 

但是当我在myRelativeLayout中添加所有这些TextView时:

 myRelativeLayout.setOnTouchListener(cellTouch); 

现在,onTouchListener永远不会被调用。 为什么?

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/black" > . . . <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/levelFirstLayout" android:layout_marginBottom="70dp" > <RelativeLayout android:id="@+id/wordsRelativeLayout" android:layout_width="fill_parent" android:clickable="true" android:layout_height="wrap_content" android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" > </RelativeLayout> </ScrollView> . . . </RelativeLayout> 

Solutions Collecting From Web of "OnTouchListener不能用于相对布局"

在myRelativeLayout.xml中添加:

 android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" 

这对我工作:

 yourRelativeLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { //gesture detector to detect swipe. gestureDetector.onTouchEvent(arg1); return true;//always return true to consume event } }); 
 tv.setClickable(true); 

导致你的布局,而不是触发触摸事件。 尝试删除这个。

这可能是你的观点是在myRelativeLayout的“顶部”。 如果是,则首先获取触摸事件。 最糟糕的是,事件的默认处理是对事件不做任何处理,然后将其消耗掉。

一个解决scheme是将这些代码添加到你的显示器的任何组件上方,在应该处理事件的视图(或布局)之上:

 someView.setOnTouchListener (new View.OnTouchListener() { @Override public boolean onTouch (View v, MotionEvent event) { return false; } }); 

关键(显然)是返回false。 当你这样做的时候,这个事件不会被消耗掉,而是被传递到你的相对布局中的东西 – 希望在你想要的地方去。

我知道这不是你的问题的解决scheme,但你是最接近我的问题,所以也许这会帮助别人。

即使在devise师看来,布局在某些设置上并不是“真实的”。

宽度缠绕, 无填充/布局中的轻击事件

 <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" 

或者, 在填充/布局中没有点击事件

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_height="fill_parent" 

与父母匹配,点按事件正在发射

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" 

你必须设置你的RelativeLayout视图这个属性为true: android:clickable="true"