View 的测量、布局和绘制

2016-7-11 chenhui View

请先了解 MeasureSpec :MeasureSpec 。


Android 通过 View 的 measure 来测量一个 View 的大小,measure 最终又调用到 View 的 onMeasure 方法。onMeasure 在 View 和 ViewGroup 中的实现不同,具体的可看:

onMeasure 作为测量 View 大小的方法,需要我们自己重写。


如果是 View,那么就需要调用 setMeasuredDimension 并传入最后决定的高宽。没什么好说的,主要是针对 wrap_content 进行专门的处理即可,具体怎么处理,可以参考 TextView 等官方控件。setMeasuredDimension 也没必要去专门解释。


如果是 ViewGroup,那么他不是要测量自己的大小,而是把 mesaure 继续传递给子 View,让子 View 的 measure 继续被调用,也就是测量他的子 View 的大小,ViewGroup 通过 measureChildren 来实现。


ViewGroup 的 measureChildren 遍历所有子 View 并调用他们的 measure()。所有的 View 都保存在 ViewGroup.children[] 内,这里就是遍历他们,并调用每一个 View 的 measure() 方法。



发表评论:

Copyright ©2015-2016 freehui All rights reserved