FrameLayout measure过程源码Log全解析之三:onMeasure代码概览

本篇我们将会大致阅读FrameLayout的代码,弄清楚measure的大致流程。后篇会逐行仔细阅读所有代码。


在AS中阅读代码

我用的ide是android studio(以下AS),代码阅读设置如下。首先下载代码:

点击SDK manager

选择安装Source for Android SDK

FrameLayout measure过程源码Log全解析之三:onMeasure代码概览_第1张图片

重启AS就可以查看代码了


FrameLayout measure过程

onMeasure第一部分 (数字对应图片数字)

1. 测量所有child view的大小。

2. 实际进行测量的语句。

3. 将所有是match parent的child view 存起来

FrameLayout measure过程源码Log全解析之三:onMeasure代码概览_第2张图片

存放match parent的child view 的 mMatchParentChildren的定义,该文件顶部



onMeasure第二部分 (数字对应图片数字)

1. 设置这个view(FrameLayout)的大小

2. 处理各种padding (对本篇而言不重要,后面会仔细讲到)

FrameLayout measure过程源码Log全解析之三:onMeasure代码概览_第3张图片


onMeasure第三部分 (数字对应图片数字)

1. 重新measure所有match parent的child view

2. 取出暂存的 match parent的child view

3. 对应各种情况,生成MeasureSpec

4. 实际测量语句

FrameLayout measure过程源码Log全解析之三:onMeasure代码概览_第4张图片


onMeasure流程总结

1. 先测量所有的child view, 将可以测出大小的child view测出大小,其他的做特殊处理(后面会讲到)。把所有match parent的child view都存起来等会儿再测量一次。

2. 这样所有不是match parent的child view大小都确定了,于是可以测量出本view的大小。因为本view可能是wrap content,所以要先确定child view的大小。

3. 确定了本view大小之后,再测量所有match parent的child view的大小,毕竟他们的大小是由parent的大小决定的,也就是本view大小决定的。


下篇预告

 我们将会逐看onMeasure三个步骤是如何完成的。下篇先讲第一部分。




----------------------------------------------------------------------------

FrameLayout measure过程源码Log全解析系列

FrameLayout measure过程源码Log全解析之一:源码下载及编译

FrameLayout measure过程源码Log全解析之二:修改framework代码,输出Log

FrameLayout measure过程源码Log全解析之三:onMeasure代码概览(本篇)

你可能感兴趣的:(FrameLayout measure过程源码Log全解析之三:onMeasure代码概览)