Android Documentation says View 有两种尺寸,测量尺寸和图纸尺寸。测量尺寸是在 measure pass(onMeasure 方法)中计算的尺寸,而 绘图尺寸 是屏幕上的实际尺寸。特别是,文档说:
These values may, but do not have to, be different from the measured width and height.
所以,我的问题是:什么会使图纸尺寸与测量尺寸不同?如果 onMeasure(int,int)方法尊重布局要求(作为参数widthMeasureSpec和heightMeasureSpec,SDK如何决定 View 应该有不同的绘图尺寸?
此外,Android Source Code 中的方式/位置测量的宽度/高度用于计算绘图宽度/高度?我试图查看 View source code ,但我无法弄清楚测量宽度/高度如何用于计算最终宽度/高度。也许它与填充有关,但我不确定。
最佳答案
顾名思义,measuredWidth/height 用于测量和布局阶段。
我举个例子,
一个小部件被要求测量自己,小部件说它想要 200 像素乘 200 像素。这是测量的宽度/高度。
在布局阶段,即在 onLayout 方法中。该方法可以使用其子项的测量宽度/高度,也可以通过调用 View 的布局方法分配新的宽度/高度。
假设 onLayout 方法调用 childview.layout(0,0,150,150) 现在 View 的宽度/高度与测量的宽度/高度不同。
我建议不要在 onLayout 方法之外使用measuredWidth/height。
总结一下。
- onMeasure -> 设置measuredWidth/measuredHeight
- onLayout -> 设置小部件的宽度/高度。
另外
public void View.layout(int l, int t, int r, int b)
似乎是位置和大小分配发生的地方。
关于android - Android SDK 中的 getWidth/Height() 和 getMeasuredWidth/Height() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657540/