ViewGroup在调用onMeasure时,会先测量父View,还是会先测量子View?

简介: ViewGroup在调用onMeasure时,会先测量父View,还是会先测量子View?

以常见的FrameLayoutLinearLayoutRelativeLayoutConstraintLayout为例,进行分析:

通过查阅这几个控件的onMeasureonLayoutonDraw方法,得出结果如下:

控件 onMeasure onLayout onDraw 备注
FrameLayout 先子view,然后是自身。 先子view,然后是自身。 先自身,然后子view。 child的顺序是正序
LinearLayout 先子view,然后是自身 先子view,然后是自身 先自身,然后子view child的顺序是正序
RelativeLayout 先子view,然后是自身。 先子view,然后是自身。 先自身,然后子view。 child的顺序:onMeasure不能保证正序,onLayout和onDraw是正序。
ConstraintLayout 先子view,然后是自身。 先子view,然后是自身。 子view参与,自身不参与。 child的顺序:onMeasure、onLayout和onDraw是正序。

ps: 正序是指按照child添加的顺序。

当然了,在这些ViewGroup实现的onMeasure方法中,child的onMeasure方法可能会被调用多次。

系列文章:

从源码角度理解FrameLayout#onMeasure对child的measure调用次数

从源码角度理解LinearLayout#onMeasure对child的measure调用次数

从源码角度理解RelativeLayout#onMeasure对child的measure调用次数

从源码角度理解ConstraintLayout#onMeasure对child的measure调用次数

ViewGroup在调用onMeasure时,会先测量父View,还是会先测量子View?

相关文章
|
前端开发 容器
View的测量、布局和绘制过程中父View(当前View)和子View的先后顺序
View的测量、布局和绘制过程中,到底是先测量(布局、绘制)父View,还是先测量子View,这篇文章会从源码角度给出答案。
|
iOS开发
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
292 0
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
|
Java API Kotlin
教你用更好的方式在Activity或Fragment之间传递以及返回数据
教你用更好的方式在Activity或Fragment之间传递以及返回数据
334 0
教你用更好的方式在Activity或Fragment之间传递以及返回数据
|
XML 数据格式
从源码角度理解FrameLayout#onMeasure对child的measure调用次数
从源码角度理解FrameLayout#onMeasure对child的measure调用次数
|
XML Android开发 数据格式
从源码角度理解LinearLayout#onMeasure对child的measure调用次数
从源码角度理解LinearLayout#onMeasure对child的measure调用次数
|
XML Android开发 数据格式
从源码角度理解RelativeLayout#onMeasure对child的measure调用次数
从源码角度理解RelativeLayout#onMeasure对child的measure调用次数
|
程序员 Android开发
有关自定义View的学习(View的点击事件传递流程)
1、安卓OnTouchListener,onTouchEvent,onClickListener执行顺序 首先我们相对比较熟悉的是处理滑动冲突时候的三个事件(ViewGroup 继承 View) (View是没有onInterceptTouchEvent方法的),先看看ViewGroup和View的事件流程方法: ViewGroup 1.
1191 0
|
容器
View的绘制过程
View的绘制过程从Activity.setContentView开始经过如下方法: Activity.setContentView—>PhoneWindow.
1012 0
|
Android开发 数据格式 XML
Android dispatchTouchEvent检测多点触摸事件是否落入在某一个View区域内
Android dispatchTouchEvent检测多点触摸事件是否落入在某一个View区域内 检测发生在Android设备屏幕上到的点击事件是否发生在某一个View的区域内,重点方法是touchEventInView,该方法进行具体的检测,如果返回true,则表明该事件是发生在当前的参数view范围内,返回false则不是。
2460 0