android组件measure过程

    首先提一个问题:一个视图View,它大小指的是什么?首先想到的就是我们在使用View在xml文档中指定的layout_width,layout_heigth,这俩个属性就是View的大小吗?我们知道在组件onDraw(Canvas canvas)方法中绘制实际View。在这个Canvas绘制的图像就是组件显示的内容。这个canvas是抽象的,没有指明大小,可以说是无限大的。但在实际显示的时候就要落到具体,这个时候的大小到底该是多少了?
   其绘制大小意图不同分为俩种视图。
   一种是内容型,该视图将会显示一段文本,比如TextView,内容有多少就会显示多少,有内容决定,我们一般会用wrap_content 属性来表达它。
   另外一种就是就是match_parent,主要指的是图形视图,该视图显示的是一个图形,比如正方形,三角型等,该视图的大小一般由父视图决定
   当然,你可以不要它这么智能,直接为视图设定一个固定大小也是可以的。

   所以视图是没有固定大小,也不应该有固定大小。我们可以把实际显示的视图大小认定为 父视图为子视图分配窗口大小或者视图自己需要的大小,layoutt这个词,布局大小,说明是动态的,在这个布局中需要的高宽。
   这是Android系统给程序员的智能,让程序员可以通过wrap_content,match_parent属性动态布局,而不是只能指定具体大小。于是android系统就要把这些抽象属性根据父视图分配或本身需求转换成一个个具体的定位值。

   于是measure 过程的本质是把layout使用的相对值(wrap_content,match_parent)转换成具体的值。 第一次使用wrap_content,或者match_parent属性时,是不是感觉很神奇了?只用设定一个属性它就能自适应内容或者充满另外一个视图。所以今天我们就来看看这个神奇的过程。



先区别View的两种类型:
    一种就是普通View。根据设定的需求(即XML中指定的参数)高宽和ViewGroup给出的建议高和宽,计算出自己确定的高宽,同时在ViewGroup指定的区域内绘制自己的形态。
   另一种是ViewGroup,放置View的容器,本身也继承View。所以有着俩重功能:像普通View一样,确定自己的高宽,不仅要考虑到想上面俩个要素,还要考虑到childView所需要的高宽,以及自己需求的模式。但它没有自己的固定形态,而是为childView设定相应的位置,让view能够在它设定的位置上绘制出自己的形态,或者添加些新的元素。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值