自定义View布局基础

布局过程的含义:

布局过程,就是程序在运行时利用布局文件的代码来计算出实际尺寸的过程

布局过程的工作内容

测量阶段和布局阶段

测量阶段:

从上到下递归地调用每个View或者ViewGroup的measure() 方法,测量他们的尺寸并计算它们的位置

布局阶段:

从上到下递归地调用每个View或者ViewGroup的layout()方法,把测得的尺寸和位置赋值给它们

 

View或ViewGruop的布局过程

1、测量阶段:

measure()方法被父View调用,在measure方法中做一些准备和优化工作后,调用onMeasure()方法来进行实际的自我测量

(1) View: View在onMeasure() 中计算出自己的尺寸,然后保存

(2) ViewGroup :ViewGroup在onMeasure()中调用所有子View的measure方法

让它们进行自我测量,并根据子View计算出的期望尺寸来计算出它们的实际尺寸和位置然后保存

同时,也会根据子View的尺寸和位置来计算出自己的尺寸然后保存。

2、布局阶段:

layout()方法被父View调用,在layout()方法中保存父View传递过来的自己的位置和尺寸,并调用onLayout()

来进行实际的内部布局

(1) View:没有子View ,所以View的onLayout() 方法什么也不做

(2) ViewGroup: ViewGroup在onLayout() 方法中会调用所有子View的

layout() 方法,把它们的尺寸和位置传给它们,让它们完成自我的内部布局

布局过程自定义方式:

重写onMeasure() 来修改已有的View的尺寸;

重写onMeasure() 来全新定制自定义View的尺寸;

重写onMeasure()和onLayout() l来全新定制自定义ViewGroup的内部布局

第一类自定义的具体做法:

(1) 重写onMeasure(),调用super.onMeasure(),触发原有的自我测量;

(2) 在super.onMeasure()下面调用getMeasuredHeight()和getMeasuredWidth()来获取之前测量的结果,并根据自己的算法,计算出新的结果

(3) 调用 setMeasuredDimension() 方法保存新的结果

发布了276 篇原创文章 · 获赞 70 · 访问量 41万+

猜你喜欢

转载自blog.csdn.net/u014005316/article/details/104473447