Android SDK中的getWidth / Height()和getMeasuredWidth / Height()之间的区别是什么?

Android文档说 ,视图有两种尺寸, 测量尺寸图纸尺寸 。 测量的尺寸是在度量传递 ( onMeasure方法)中计算的尺寸 ,而graphics尺寸是屏幕上的实际尺寸。 特别是,文件说:

这些值可能但不一定与测量的宽度和高度不同。

所以,我的问题是:什么可能使绘图尺寸与测量尺寸不同? 如果onMeasure(int,int)方法遵守布局要求(作为参数widthMeasureSpecheightMeasureSpec给出 ,那么SDK如何决定该视图应该具有不同的graphics大小?

另外,如何在Android源代码中使用测量的宽度/高度来计算绘图宽度/高度? 我尝试查看视图源代码 ,但我无法弄清楚如何用measuredWidth / Height来计算最终的宽度/高度。 也许这与填充有关,但我不确定。

顾名思义,在测量和布局阶段使用了measuredWidth / height。

让我举个例子,

一个小部件被要求测量自己,小部件说,它想要200px200px。 这是测量的宽度/高度。

在布局阶段,即在onLayout方法。 该方法可以使用其children的measuredWidth / height或通过调用视图的布局方法来指定新的宽度/高度。

可以说onLayout方法现在调用childview.layout(0,0,150,150)视图的宽度/高度不同于测量的宽度/高度。

我build议不要在onLayout方法外使用measuredWidth / height。

总结。

  1. onMeasure – >设置measuredWidth / measuredHeight
  2. onLayout – >设置小部件的宽度/高度。

additionallly
public void View.layout(int l, int t, int r, int b)
似乎是位置和大小的分配发生的地方。