【问题标题】:What is the difference between getWidth/Height() and getMeasuredWidth/Height() in Android SDK?Android SDK 中的 getWidth/Height() 和 getMeasuredWidth/Height() 有什么区别?
【发布时间】:2012-01-29 06:17:42
【问题描述】:

Android Documentation says 表示视图有两种尺寸,测量尺寸图纸尺寸。测量尺寸是在 measure passonMeasure 方法)中计算的尺寸,而 绘图尺寸 是屏幕上的实际尺寸。特别是,文档说:

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

所以,我的问题是:什么会使图纸尺寸与测量尺寸不同?如果onMeasure(int,int) 方法符合布局要求(作为参数widthMeasureSpecheightMeasureSpec,SDK 怎么决定视图应该有不同的绘图尺寸? p>

此外,Android Source Code 中的测量宽度/高度如何/在何处用于计算绘图宽度/高度?我试图查看View source code,但我无法弄清楚测量宽度/高度如何用于计算最终宽度/高度。也许它与填充有关,但我不确定。

【问题讨论】:

  • 我认为如果将滚动添加到视图中,这些措施可能会有所不同。
  • 也许,但我开发了一个自定义 ViewGroup,这发生在我的代码中。在发生这种行为之前,我不会处理滚动。所以我认为应该不仅仅涉及滚动。
  • 我确认,我也开发了一个自定义 ViewGroup 来强制给定宽高比:我强制测量宽度和高度(低于或等于建议的),但结果是实际宽度和高度没有改变(不是测量的)。与滚动无关。我真的找不到强制实际宽度和高度的方法。

标签: android android-layout view size dimensions


【解决方案1】:

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

我举个例子,

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

在布局阶段,即在 onLayout 方法中。该方法可以使用其子项的测量宽度/高度,也可以通过调用视图的布局方法分配新的宽度/高度。

假设 onLayout 方法调用 childview.layout(0,0,150,150) 现在视图的宽度/高度与测量的宽度/高度不同。

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

总结一下。

  1. onMeasure -> 设置测量宽度/测量高度
  2. onLayout -> 设置小部件的宽度/高度。

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

【讨论】:

  • 也就是说,我们应该始终使用 getWidth/getHeight 来获取 View 的“真实”尺寸,对吧?
  • 是的,但是如果你自己做布局,那么你应该使用measuredWidth而不是width。
  • 那么,在onMeasure() 中设置dimesions 的目的是什么?我的意思是,布局通道是最后一个通道,您可以在其中设置视图的最终尺寸,可能与测量尺寸无关
  • @edoardotognoni 取决于布局(LinearLayout、RelativeLayout 或您的自定义布局),以便为视图提供正确的大小和位置。
  • 好吧,假设视图告诉“我想要这些尺寸”。虽然布局显示“您将拥有这些尺寸”。对吗?
猜你喜欢
  • 2013-01-08
  • 1970-01-01
  • 2018-12-10
  • 2012-09-15
  • 2013-07-24
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多