欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android中的OnMeasure及OnLayout 博客分类: Android_笔记 androidonLayoutonMeasure 

程序员文章站 2024-03-17 09:01:22
...

 

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()方法已经被系统调用了。