ViewGroup.measureChildWithMargins() 学习笔记

来源:互联网 发布:逆矩阵的求法 编辑:程序博客网 时间:2024/06/07 16:03

一、VIew 中对 子视图 进行 measure() 操作:

1.measureChildren(): 内部调用 measureChild() 对每一个子视图进行 measure 操作

2.measureChild() : 为指定的子视图进行measure操作

3.measureChildWithMargins() : measure 时考虑把 margin 及  padding 也作为子视图大小的一部分


二、measureChildWithMargins() 执行流程:

1.调用child.getLayoutParams()获得子视图的LayoutParams属性

   1.1 该方法需要重载 generateDefaultLayoutParams() 返回一个继承自 ViewGroup.MarginLayoutParams 的 布局类(例如 LinearLayout.LayoutParams),

         如果未重载将导致 本 View 的XML属性 layout_margin 失效并且不能使用 measureChildWithMargins()

2.调用两次 getChildMeasureSpec()函数,分别计算出孩子视图的宽度和高度的 Spec(确定子视图的测量规格).

3.调用child.measure()函数,确定子视图的最终布局大小。

三、最后调用resolveSize()获取高度,然后调用 setMeasureDimension()设置该本身所占用的布局高度。


  


  





0 0
原创粉丝点击