首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将点击事件从父(ViewGroup)委托给子(视图) android?

在Android中,可以通过以下步骤将点击事件从父ViewGroup委托给子视图:

  1. 首先,为父ViewGroup设置一个点击事件监听器。
  2. 首先,为父ViewGroup设置一个点击事件监听器。
  3. 然后,在子视图的布局文件中,设置子视图的点击事件为不可用(android:clickable="false"),以确保点击事件可以透传到父ViewGroup。
  4. 然后,在子视图的布局文件中,设置子视图的点击事件为不可用(android:clickable="false"),以确保点击事件可以透传到父ViewGroup。
  5. 最后,在子视图的代码中,设置点击事件为可用,并返回false以将点击事件透传给父ViewGroup。
  6. 最后,在子视图的代码中,设置点击事件为可用,并返回false以将点击事件透传给父ViewGroup。

通过以上步骤,父ViewGroup的点击事件将会透传给子视图,并且子视图也可以处理自己的点击事件。这种委托点击事件的方式可以在需要在父ViewGroup中处理点击事件的同时,让子视图也能够响应点击事件。

腾讯云相关产品推荐链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android事件分发备忘

前言 事件的分发是面试的必考题,也是Android作为一个移动系统,与用户交互的基础。由于整个事件分发比较繁杂,这里做一个总结,以作备忘。 事实上,Android系统中的事件分发机制是一个委托者模型。...onTouchEvent 在onTouchEvent中,Android实现了View的点击拖动等事件。...---- ViewGroup ViewGroup 作为视图层级中View的父控件。...,因此,在dispatchTouchEvent中,ViewGroup需要优先考虑onInterceptTouchEvent,如果事件被拦截,则直接调onTouchEvent,如果未被拦截,就需要调用所有...ViewGroup的所有ChildView的onTouchEvent全部返回false,此时表示,没有任何一个ChildView愿意处理这个事件。所以,事件会返回上层ViewGroup

43530

这可能是2020大小厂问的最经典的Android面试题了——事件分发机制、View渲染过程

面试官1:请详细叙述Android事件分发机制 这道题是很多家面试公司会问到的一道经典面试题,但又经常被面试者忽略。...接下来用一张图大家叙述下具体是怎么一步一步分发的。...4、 不传给View,事件终止往下传递,事件开始回溯,从父View的onTouchEvent开始事件从下到上回归执行每个控件的onTouchEvent------->return false; 注:...是否重新分配视图的位置(layout) image.png 原理: layout也是从顶层父View向View的递归调用View.layout方法的过程,父View根据上一步measureView得到的布局大小和布局参数...这些内容均免费分享大家,需要完整版的朋友,点击这里可以看到全部内容。

1K20
  • Android UI布局优化之ViewStub

    在这几百个视图里面,可能有部分视图是在点击某一按钮也就是并不是马上加载, 而是延迟到要使用的时候才加载这部分视图。也就是类似于单例模式中的懒加载。 特性: 1....调用setVisibility或者inflate方法之后,懒加载的视图会把ViewStub从父节点中替换掉 7....inflate方法会返回待加载视图的根节点 使用: 我在一个activity上放置了一个按钮,点击后加载懒加载的视图。 Activity布局文件定义my_sub_activity.xml: <?...,因为inflate只能被调用一次 // 如果再次点击按钮,会抛出异常"ViewStub must have a non-null ViewGroup viewParent"...viewParent"); } } ViewStub的inflate方法简要的讲就是把自己从父亲从移除,把待加载的视图加入到父节点中, 并把自己所有的layout属性待加载的视图

    77720

    Android Scroll分析

    概述 相对于Android2.x版本中常见的长按、点击操作,滑动的方式具有更友好的用户体验性。因此从4.x的版本开始,滑动操作大量出现在Android系统中。...---- 视图坐标系 Android还有一个视图坐标系,它描述的是视图在父视图中的位置关系。 和上面的Android坐标系相辅相成。...在触摸事件中,通过getX()和getY()所获得的坐标就是视图坐标系中的坐标。 ---- 触控事件-MotionEvent 触控事件MotionEvent在用户交互中,占据着举足轻重的位置。...,即视图坐标 getY():获取点击事件距离控件顶边的距离,即视图坐标 getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标 getRawY():获取点击事件距离整个屏幕顶边的距离...需要注意的是: scrollTo和scrollBy方法移动的是View的content,即让View中的内容移动,如果在ViewGroup中使用scrollTo和scrollBy方法,那么移动的将是所有的

    80220

    android SurfaceView绘制实现原理解析

    ViewGroup类的成员变量mChildren保存的是当前正在处理的视图容器的视图,而另外一个成员变量mChildrenCount保存的是这些视图的数量。         ...ViewGroup类的成员函数dispatchAttachedToWindow的实现很简单,它只是简单地调用当前正在处理的视图容器的每一个视图的成员函数dispatchAttachedToWindow...窗口的顶层视图是使用DecorView类来描述的,而DecroView类的成员函数dispatchWindowVisibilityChanged是从父ViewGroup类继承下来的,因此,接下来我们就继续分析...ViewGroup类的成员函数dispatchWindowVisibilityChanged的实现很简单,它只是简单地调用当前正在处理的视图容器的每一个视图的成员函数dispatchWindowVisibilityChanged...回到ViewGroup类的成员函数gatherTransparentRegion中,当前正在处理的视图容器即为当前正在处理的窗口的顶层视图,前面我们已经假设它里面嵌入有一个SurfaceView视图

    5.6K131

    Android高频面试专题 - 提升篇(三)事件分发机制

    onInterceptTouchEvent:方法返回值为true表示拦截这个事件并交由自身的onTouchEvent方法进行消费;返回false表示不拦截,需要继续传递给视图。...如果return super.onInterceptTouchEvent(ev), 事件拦截分两种情况:   1.如果该View存在View且点击到了该View, 则不拦截, 继续分发 View...2.如果该View没有View或者有View但是没有点击中子View(此时ViewGroup 相当于普通View), 则交由该View的onTouchEvent响应,此时相当于return true...onTouchEvent:方法返回值为true表示当前视图可以处理对应的事件;返回值为false表示当前视图不处理这个事件,它会被传递给父视图的onTouchEvent方法进行处理。...ViewGroup默认不拦截任何事件Android源码中ViewGroup的onInterceptTouchEvent方法默认返回false。

    2.3K42

    Android新组件RecyclerView介绍,其效率更好

    RecyclerView介绍 非著名程序员 今天我们首先来说为什么要介绍这个新组件RecyclerView,因为前几天我发布了一个常用面试题ListView的复用及如何优化的文章,介绍一些开发者,但是我看到有关的反馈说...; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.pandastudios.pandastudios.R...它不关心如何将View放在合适的位置,也不关心如何分割这些View,更不关心每个子View各自的外观。更进一步来说就是RecyclerView它只负责回收和重用的工作,这也是它名字的由来。...所以目前在适配器中处理这样的事件比较好。如果想要从适配器上添加或移除条目,需要明确通知适配器。这与先前的notifyDataSetChanged()方法稍微有些不同。...整体总结它的几点如下: Adapter:包装数据集合并且为每个条目创建视图。 ViewHolder:保存用于显示每个数据条目的View。

    1.3K90

    手把手教你读懂源码,View的Touch事件传递流程详细剖析

    2、ViewGroup的dispatchTouchEvent 如果要很好掌握Touch事件处理,这部分要重点学习,而且不同Android版本的实现不一致,本文仍然使用最新的Android 7.1...接着获取该ViewGroup中子View的个数,得到该事件发生的位置,获取View的list集合preorderedList,再通过for循环倒序遍历当前ViewGroup的所有视图。...如点击的地方有两个子View都包含点击事件的坐标,那么后被添加到布局中的那个子view会先响应事件,即点击的时候最上层的那个组件先去响应该事件。...isTransformedTouchPointInView方法 判断视图有scrollTo或scrollBy造成的滚动偏移也需要计算在内,并判断触摸点是否在当前视图内。...Android事件分发机制简图 事件从Activity.dispatchTouchEveent()开始传递,只要没有拦截,就会从最上层(ViewGroup)开始一直往下传递,View通过onTouchEvent

    80270

    一文读懂Android View事件分发机制

    上面结论先简单的理解一下,通过下面的流程图,会更加清晰的帮助我们梳理事件分发机制 ? View结构图 ? View事件分发流程图 可以看出事件的传递过程都是从父View到View。...如果要处理所有的点击事件那么需要选择dispatchTouchEvent方法 而FLAG_DISALLOW_INTERCEPT标志位可以帮助我们去有效的处理滑动冲突 当ViewGroup不拦截事件,那么事件将下发给...上面代码是将事件分发给View的关键代码,需要关注的地方都加了注释。分发过程首先需要遍历ViewGroup的所有View,可以接收点击事件的View需要满足下面条件。...当child为null时,handled = super.dispatchTouchEvent(event);所以此时将调用View的dispatchTouchEvent方法,点击事件了View。...结论: ViewGroup会遍历所有View去寻找能够处理点击事件View(可见,没有播放动画,点击事件坐标落在View内部)最终调用View的dispatchTouchEvent方法处理事件

    34220

    ViewBinding 与 Kotlin 委托双剑合璧

    ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...在这篇文章里,我将总结 ViewBinding 使用方法 & 原理,示例程序 AndroidFamilyDemo · KotlinDelegate[2] 有用请记得 Star ,小彭一点创作的动力。...ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...2.1 添加配置 视图绑定功能按模块级别启用,启用的模块需要在模块级 build.gralde 中添加配置。例如: build.gradle android { ......总结 ViewBinding 是一个轻量级的视图绑定方案,Android Gradle 插件会为每个 XML 布局文件创建一个绑定类。

    1.6K20

    SwipeRefreshLayout与RecyclerView的巧夺天工

    如果子视图为自定义视图那么必须重写该方法。...同理,当你的视图用布局包裹的时候,其就是你自定义的,除非你的视图只有ListView,当有多个控件时候,其默认找不到ListView监听其滑动事件,必须重写该方法。...㈡重写SwipeRefreshLayout 既然找不到该视图,那么就必须传入视图的控件,以监听其滑动状态,也就是自定义一个属性: <declare-styleable name="LYJSwipeLayoutAttrs...执行完成也要关闭加载动画 } @Override public void onItemClick(View view, int postion) { //每项的<em>点击</em><em>事件</em>...从这里可以看到,虽然说ListView有<em>点击</em><em>事件</em>,有许多扩展,但你想扩展ListView就必须重构很多地方。而RecyclerView,虽然什么都没有,但你扩展起来要方便的多。这就是从0开始的优势。

    1.4K20

    Android开发笔记(四十五)手势事件

    借助于GestureDetector,可以在大多数场合下辨别出常用的几个手势事件,如点击、长按、翻页等等。...一般情况下,onDown和onScroll要返回true,因为这两个方法尚无法构成具体的事件意图;而onSingleTapUp和onFling要返回false,因为onSingleTapUp表明了此次是点击事件...下面示例代码演示了这么一个意图:当用户按下或者滑动时,当前控件需要响应手势事件,请上级视图不要拦截手势;当用户松开或取消时,当前控件已经处理完毕,允许上级视图拦截手势。...(点击事件) } else if (mOffsetX < mOffsetY) { result = true; // true不传给控件(垂直滑动) } else { result...= false; // false传给控件 } break; } return result; } } 弹性滑动 滑动计算器Scroller Scroller是Android

    1.3K30

    Android中文API——ScrollView

    android.view.ViewGroup                    android.widget.FrameLayout                             android.widget.ScrollView...四、公共方法 public void addView (View child) 添加视图。如果事先没有视图设置layout参数,会采用当前ViewGroup的默认参数来设置视图。...如果事先没有视图设置layout参数,会采用当前ViewGroup的默认参数来设置视图。...参数 child 所添加的视图 params 为视图设置的layout参数 public boolean arrowScroll (int direction) 响应点击上下箭头时对滚动条滚动的处理...public boolean dispatchKeyEvent (KeyEvent event) 发送一个key事件当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图

    4.6K30

    手把手教你读懂源码,View的绘制流程详细剖析

    方法来让子类有机会处理这个变化事件。...继续回到layout()方法,后面调用了onLayout()方法,实际上是自己的控件布局。...ViewGroup的dispatchDraw方法 首先判断当前ViewGroup容器是否设置的布局动画,然后遍历每个子视图View设置动画效果,接着获得布局动画的控制器,最后开始布局动画。...调用drawChild方法 接下来循环遍历每一个View,并调用drawChild方法绘制当前视图视图View: ?...View的绘制主流程 在measure方法中,会调用onMeasure方法,在onMeasure方法中会对所有的元素进行measure过程,这个时候measure流程就从父容器传递给容器,这样就完成了一次测量

    1.1K100

    图解 Android 事件分发机制

    Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android...Android 事件分发流 关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明,如果用心的去看肯定是收获不少但是确实很难把整个流程说清和记住...曾经也是拼命想记住整个流程,但是一段时间又忘了,最后觉得分析这种问题和事件流的走向,一张图来解释和说明会清晰很多,下面我根据画的一张事件分发流程图,说明的事件从用户点击之后,在不同函数不同返回值的情况的最终走向...4、 不传给View,事件终止往下传递,事件开始回溯,从父View的onTouchEvent开始事件从下到上回归执行每个控件的onTouchEvent------->return false; 注:...ViewGroup的onInterceptTouchEvent方法对于事件有两种情况: 1、拦截下来,自己的onTouchEvent处理--->return true; 2、不拦截,把事件往下传给View

    1.3K90

    Android下的Touch事件分发详解

    本文将详细介绍 Android 下的 Touch 事件分发机制,包括事件分发的过程、涉及的方法以及 ViewGroup事件分发的实现。...在这个过程中,每个视图(如 ViewGroup)都可以通过onInterceptTouchEvent方法对事件进行拦截。如果某个视图拦截了事件事件将不再继续传递给更深层的视图。...当 Touch 事件未被最内层的视图消费时(即onTouchEvent方法返回false),事件会沿着视图层次结构逐级向外回传给父视图。...四、ViewGroup 中的 dispatchTouchEvent 实现 在 Android 系统中,ViewGroup 对 dispatchTouchEvent 方法进行了重载,以实现更复杂的事件分发逻辑...五、总结 通过本文的介绍,我们了解了 Android 下的 Touch 事件分发机制,包括事件分发的过程、涉及的方法以及 ViewGroup事件分发的实现。

    15610
    领券