初·Android View的绘制流程

我们按照这个绘制流程来学习:

  1. xml布局文件的解析
  2. 测量onMeasure
  3. 布局onLayout(ViewGroup)
  4. 绘制onDraw

onMeasure 测量

父View模式 父View宽高 子View设置宽高 子View测量宽高 子View测量模式
EXACTLY 父View大小是确切的,例如(100,200) 子View </br>(match_parent,match_parent) (100,200) EXACTLY
EXACTLY 父View大小是确切的,例如(100,200) 子View(200,100) 子View的测量大小就是(200,100),只是绘制展示后超不部分被遮挡 EXACTLY
EXACTLY 父View大小是确切的,例如(100,200) 子View</br>(wrap_content,wrap_content) 子View大小不确定,暂定父View的大小(100,200),最大不能超过父View大小 AT_MOST
---- -------------- ------------ ----------- -----------
AT_MOST 父View大小不确定,父View是Match或Wrap,但是其父View也给它设置了一个最大值,就是MeasureSpec 的size,大小不能超过这个最大值,父View(size,size) 子View(match_parent,match_parent) 子View填充父View,所以(size,size),大小不能超过size AT_MOST
AT_MOST 父View大小不确定,父View是Match或Wrap,但是其父View也给它设置了一个最大值,就是MeasureSpec 的size,大小不能超过这个最大值,父View(size,size) 子View(200,100) 子View的测量大小就是(200,100),只是绘制展示后超不部分被遮挡 EXACTLY
AT_MOST 父View大小不确定,父View是Match或Wrap,但是其父View也给它设置了一个最大值,就是MeasureSpec 的size,大小不能超过这个最大值,父View(size,size) 子View(wrap_content,wrap_content) 子View大小不确定,暂定父View的大小(size,size),最大不能超过父View大小 AT_MOST
---- -------------- ------------ ----------- -----------
UNSPECIFIED 父View大小未指定,表示没有任何束缚和约束,没有最大值限制,可以得到任意想要的大小 子View(match_parent,match_parent) 因为父View大小未指定,想要多大就多大,所以match 父View没有任何意义 ,则宽高(0,0) AT_MOST
UNSPECIFIED 父View大小未指定,表示没有任何束缚和约束,没有最大值限制,可以得到任意想要的大小 子View(200,100) 子View的测量大小就是(200,100),只是绘制展示后超不部分被遮挡 EXACTLY
UNSPECIFIED 父View大小未指定,表示没有任何束缚和约束,没有最大值限制,可以得到任意想要的大小 子View(wrap_content,wrap_content) 子View大小不确定,暂定等于父View的大小,父View的大小没指定,所以宽高没意义(0,0) AT_MOST
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容