问题描述
Android系统在绘制View前,必须对View进行测量,即告诉系统该画一个多大的View。这个过程在onMeasure()方法中进行。
MeasureSpec类
Android系统提供了一个设计了一个短小精悍却功能强大的类--MeasureSpec类,通过它们来帮助我们测量View。
MeasureSpec是一个32位的int值,其中高2位为测量模式,低30位为测量的大小。
测量模式分为三种:
- EXACTLY
精确模式,当layout_width属性或layout_height属性指定为具体数值时或者指定match_parent属性时(占据父View的大小),此时系统使用EXACTLY模式。
- AT_MOST
最大值模式,当layout_width属性或layout_height属性指定为wrap_content时,即控件大小随着控件的子空间或内容的变化而变化,此时只要尺寸不超过父控件允许的最大尺寸。
- UNSPECIFIED
不知道大小测量模式,View想多大就多大,在绘制自定义View时才会使用。
View类默认的onMeasure()置支持EXACTLY模式,若使用自定义控件的时候不重写onMeasure()方法的话,就只能使用EXACTLY模式&#x