首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不扩展ViewGroup的情况下处理拦截触摸事件

在不扩展ViewGroup的情况下处理拦截触摸事件
EN

Stack Overflow用户
提问于 2014-01-09 15:20:38
回答 5查看 18.7K关注 0票数 30

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

我已经将OnTouchListener设置为这种布局,并在其中做了一些工作并返回true

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

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

这会很有用,但是我需要在需要此功能的地方修改许多xml文件,方法是用我的CustomRelativeLayout替换RelativeLayout。

所以我的问题是:

RelativeLayout中的子视图使用事件之前,有没有办法处理RelativeLayout (当然是ViewGroup)的触摸事件?我不想扩展RelativeLayout...

EN

回答 5

Stack Overflow用户

发布于 2014-01-09 19:51:13

尝试覆盖

代码语言:javascript
运行
复制
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    return super.dispatchTouchEvent(ev);
}

Activity的。这个方法是第一个处理触摸事件的方法。但在这种情况下,您需要使用视图的当前坐标

票数 24
EN

Stack Overflow用户

发布于 2017-01-18 04:36:06

虽然不一定是理想的,但这对于没有动态内容的较小布局很有效。

在xml中,将android:clickable="false"设置为布局中ViewGroup的所有后代(包括嵌套的ViewGroups及其子项)。每个被点击的子节点都会将点击传递给它的父节点,最终到达ViewGroup的默认触摸处理程序。确保将根ViewGroup设置为android:clickable="true"viewgroup.setClickable(true),您希望在该根目录中获取单击事件

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

票数 3
EN

Stack Overflow用户

发布于 2014-01-09 15:45:06

尝试向RelativeLayout添加onTouchListener

代码语言:javascript
运行
复制
RelativeLayout rl = (RelativeLayout) findViewById( R.id.relativeLauout );
    rl.setOnTouchListener( new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // do something
            return false;
        }
    });

或者使用Activity中的onTouchEvent方法

代码语言:javascript
运行
复制
@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    return super.onTouchEvent(event);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21013963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档