Android 在不扩展ViewGroup的情况下处理Intercept touch事件

Android 在不扩展ViewGroup的情况下处理Intercept touch事件,android,touch-event,ontouchlistener,Android,Touch Event,Ontouchlistener,我有一个RelativeLayout,这个布局有近10个视图 我已将OnTouchListener设置为此布局,并在其中执行一些操作,然后返回true 当我触摸没有视图的布局时,这个监听器工作得很好(在空白区域)。如果我触及此布局的子视图,则此侦听器不会触发 从文档中,我了解到我们可以通过扩展ViewGroup(这里是RelativeLayout)覆盖onInterceptTouchEvent(),并在子视图使用此事件之前处理触摸事件 这将起到一定的作用,但我需要修改许多需要此功能的xml文件,

我有一个
RelativeLayout
,这个布局有近10个视图

我已将
OnTouchListener
设置为此布局,并在其中执行一些操作,然后返回
true

当我触摸没有视图的布局时,这个监听器工作得很好(在空白区域)。如果我触及此布局的子视图,则此侦听器不会触发

从文档中,我了解到我们可以通过扩展ViewGroup(这里是RelativeLayout)覆盖onInterceptTouchEvent(),并在子视图使用此事件之前处理触摸事件

这将起到一定的作用,但我需要修改许多需要此功能的xml文件,用CustomRelativeLayout替换RelativeLayout

所以我的问题是:


RelativeLayout
中的子视图使用事件之前,是否有任何方法处理
RelativeLayout
(当然是视图组)的触摸事件?我不想扩展
RelativeLayout

尝试将onTouchListener添加到RelativeLayout

RelativeLayout rl = (RelativeLayout) findViewById( R.id.relativeLauout );
    rl.setOnTouchListener( new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // do something
            return false;
        }
    });
或者从活动中使用方法onTouchEvent

@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    return super.onTouchEvent(event);
}
试图覆盖

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    return super.dispatchTouchEvent(ev);
}
属于
活动
。 此方法是第一个处理触摸事件的方法。
但在这种情况下,您需要使用视图的当前坐标

您只需在xml中设置:

android:clickable="true"

在处理
ACTION\u DOWN
事件时,尝试在子视图的
onTouchEvent()方法中返回false。因此,转发触摸事件不会发送到子视图,也就是未使用的事件。

虽然不一定是理想的,但对于没有动态内容的较小版面来说,这非常有效

在xml中,将
android:clickable=“false”
设置为布局中视图组的所有子代(包括嵌套视图组及其子代)。然后,单击的每个子对象都会将单击传播到其父对象,最终到达ViewGroup的默认触摸处理程序。确保将要在其中获取单击事件的根视图组设置为
android:clickable=“true”
ViewGroup.setClickable(true)


如果动态添加视图,请确保调用
view.setClickable(false)在将其添加到视图层次结构之前。

感谢您的回答。。。在问问题之前,我试过你的两种方法。。。但它不起作用:-(可以尝试扩展onTouchListener并将其设置为布局中的所有视图。没有这种方法:必须扩展RelativeLayout