android - Android SDK 中的 getWidth/Height() 和 getMeasuredWidth/Height() 有什么区别?

标签 android android-layout view size dimensions

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)方法尊重布局要求(作为参数widthMeasureSpecheightMeasureSpec,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。

总结一下。

  1. onMeasure -> 设置measuredWidth/measuredHeight
  2. 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/

相关文章:

java - 打开和关闭飞行模式以及如何在 android 中打开移动数据

安卓 : display foreground (and views) in a camera preview in order to make an old camera back look

当我第二次单击它时,Android 键盘覆盖 EditText

sql - 阻止 SQL Server Management Studio 打破我的观点

php - 有可能在变量中获取 Phalcon\Mvc\View 渲染输出吗?

android - 如何在 Android 中正确重用 Animation?

android - 在 IntelliJ 中运行 RoboElectric 2 测试的仪器错误

java - 如何将json转换为不换行的字符串和其他格式

android - 从 SD 卡中删除音频

android - 在页面底部和列表底部放置一个按钮