Android中的OnMeasure及OnLayout

 

1、View中包含onLayout()onMeasure()layout()measure()。查看源码可以在Viewlayout()中调用了onLayout(),而onLayout()本身是一个等待重写的空方法,同样的在measure()中调用了onMeasure()方法,和onLayout()不同的是onMeasure()并不是一个空方法,在其中调用了setMeasureDimension()方法。setMeasureDimension()是用来保存组件的widthMeasureSpecheightMeasueSpac信息的,这两个保存下来的信息就是getMeasuredWidth()getMeasuredHeight()中返回的值。

2、ViewGroupView是一样的,不同的是ViewGrouponLayout是一个必须被实现的抽象方法。同样的在layout()中调用onLayout(),在measure()中调用onMeasure()

3、要实现自定义的ViewGroup,可以在其必须实现的onLayout()中调用子Viewlayout()。而子viewlayout()又会去调用其onLayout()方法,那么这样就形成了所谓的“递归”布局过程了。

4、一个view的真正布局方法是setFrame(),这在layout()中有被调用到。即layout()中会先调用setFrame()设置组件的边界,再调用onLayout(),如果该view包含子view。则可以调用每个子viewlayout()方法。

5、要指子view的大小可以在子viewonMeasure()中调用setMesauredDimension()来实现。

6、综上所述,android中组件绘制分为两个过程,测量(Measure)和布局(Layout)。测量过程通过measure()onMeasure()方法实现,measure()方法中调用了onMeasure()方法,在onMeasure()中可以通过setMeasuredDimension()来设置组件的尺寸信息,这些尺寸信息在layout过程中会被使用到。布局过程是通过layout()onLayout()方法实现的,layout()中调用了onLayout(),在layout()中可以使用getMeasuredHeight()getMeasuredWidth()通过setFrame()来设置组件范围。所以在自定义的ViewGroup中往往只重写onLayout(),这是因为ViewGrouplayout()方法已经被系统调用了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值