ViewGroup拦截子View点击事件失败

流程图整理自Android 触摸事件机制(四) ViewGroup中触摸事件详解 | skywang

事情起因:

要用RelativeLayout去拦截里面的子View的点击事件,因此直接为

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

打算通过返回true来将后续的点击事件消费掉,但是失败了。

在看了源码分析之后,找到原因:

  1. 当ViewGroup有子View的时候,一定能拦截点击事件的入口是onInterceptTouchEvent()
  2. 当ViewGroup有子View能接收点击事件的时候,不会调用ViewGroup任何自己的点击事件监听方法(无论内部还是外部设置的监听器)。
  3. 当ViewGroup没有子View能接收点击事件时,则会调用super.dispatchTouchEvent(),此时将ViewGroup当做View来看,按照View的那一套来。

结论:

我的RelativeLayout里面的子View可以接收点击事件,因此点击事件会直接传给他们,无法通过外部设置监听器去拦截。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容