我有RelativeLayout
,其中我动态添加了许多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>
答案 0 :(得分:18)
在myRelativeLayout.xml中添加:
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
答案 1 :(得分:14)
这对我有用:
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
}
});
答案 2 :(得分:7)
tv.setClickable(true);
导致你的布局,而不是触发触摸事件。尝试删除它。
答案 3 :(得分:3)
您的视图中的某些内容可能是myRelativeLayout的“顶部”。如果是,它首先获得触摸事件。最糟糕的是,事件的默认处理是对事件不做任何事情然后消耗它。
一种解决方案是将此代码添加到显示器的任何组件上方“应该处理事件的视图(或布局)”上方:
someView.setOnTouchListener (new View.OnTouchListener()
{
@Override
public boolean onTouch (View v, MotionEvent event)
{
return false;
}
});
密钥(显然)是返回false。当你这样做时,事件不会被消耗,而是被“向下”传递给相对布局中的某个东西 - 希望你想要它去的地方。
答案 4 :(得分:1)
我知道这不是你的问题的解决方案,但你的问题是最接近我的问题,所以也许这会对其他人有所帮助。
即使设计师看起来像这样,但布局并不是&#34;屏幕宽度&#34;实际上有一些设置。
包裹宽度,填充/布局中没有点击事件
<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"
答案 5 :(得分:0)
您必须将RelativeLayout
设置为此属性为true:android:clickable="true"