Android:如何获得自定义View的高度和宽度?

Roh*_*mar 66 android views

可能重复:
如何根据其父级维度调整Android视图的大小

我该如何使用getMeasuredWidth()getMeasuredHeight?它总是返回0.这与getHeight()和之间的差异是什么getWidth()

Par*_*ani 64

刚刚获得了一个解决方案来获取自定义视图的高度和宽度:

@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld){
    super.onSizeChanged(xNew, yNew, xOld, yOld);

    viewWidth = xNew;
    viewHeight = yNew;
}
Run Code Online (Sandbox Code Playgroud)

它在我的案例中工作.

  • 我相信这是确定宽度和高度的正确方法.这也是最简单的. (4认同)
  • 一个问题是当键盘出现时这会被调用 (3认同)

小智 12

不要试图让它们在构造函数中.尝试在onDraw()方法中调用它们.

  • 不是onDraw连续调用?任何行动都可能对表现产生负面影响. (12认同)

小智 12

您可以使用以下方法获取视图的宽度和高度,例如,

int height = yourView.getLayoutParams().height;
int width = yourView.getLayoutParams().width;
Run Code Online (Sandbox Code Playgroud)

这给出了在XML布局中指定的视图的转换值.

假设在XML中指定的高度值是53dp,您将获得整数转换后的值为80.

  • 请注意,只要指定宽度或高度,这将给出宽度/高度.如果设置WRAP_CONTENT,则不会给出正确的宽度/高度.它将返回-1或0,具体取决于其"MATCH_PARENT"或"WRAP_CONTENT".http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html (21认同)

Rak*_*kib 9

我也失去了身边getMeasuredWidth(),并getMeasuredHeight() getHeight()getWidth()很长一段时间..........后来我发现onSizeChanged()的方法是很有益的.

新博文:如何在Android中获取customView(扩展视图)的宽度和高度尺寸http://syedrakibalhasan.blogspot.com/2011/02/how-to-get-width-and-height-dimensions.html


OFF*_*ind 6

getHeight()和之间的区别getMeasuredHeight()是第一种方法将返回实际高度View,第二种方法将返回子项的汇总高度View.换句话说,getHeight()返回视图高度,getMeasuredHeight()返回此视图需要显示其所有元素的高度


Fal*_*rri 1

很好地getHeight获取了高度,并getWidth获取了宽度。但你调用这些方法太早了。

onCreate如果您在或中调用它们onResume,则视图尚未绘制。您必须在绘制视图后调用它们。