Android:如何获取自定义视图的高度和宽度?

72

如何使用getMeasuredWidth()getMeasuredHeight()?它总是返回0。这与getHeight()getWidth()有什么区别?


为什么我不能在View中使用Display display = getWindowManager().getDefaultDisplay(); - Rohith Nandakumar
1
不是重复的问题。问题中根本没有提到父级尺寸! - SMBiggs
1
同意 @SMBiggs 的观点。令人好笑的是,一个链接(https://stackoverflow.com/questions/2159320/how-to-size-an-android-view-based-on-its-parents-dimensions)也被删除了。 - undefined
6个回答

75

刚刚找到了获取自定义视图高度和宽度的解决方案:

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

    viewWidth = xNew;
    viewHeight = yNew;
}

在我的情况下它是可行的。


4
我认为这是确定宽度和高度的正确方法,也是最简单的方法。 - D-Dᴙum
4
一个问题是当键盘弹出时,会调用这个函数。 - droid kid
如果你想获取整个布局中某个视图的尺寸,请使用以下代码:someView.measuredWidthsomeView.measuredHeight - undefined

12
您可以使用以下方法来获取视图的宽度和高度, 例如,
int height = yourView.getLayoutParams().height;
int width = yourView.getLayoutParams().width;

这提供了在 XML 布局中指定的视图的转换后值。

比如如果在 XML 中指定高度值为 53dp,则会得到转换后的整数值80。


27
注意,只要指定了宽度或高度,这将给出宽度/高度。如果设置为WRAP_CONTENT,则不会给出正确的宽度/高度。它会返回-1或0,具体取决于是“MATCH_PARENT”还是“WRAP_CONTENT”。http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html - Reinherd
是的,它给了我-1,而不是实际滚动视图的高度,我需要一个滚动视图的高度,在我的情况下,我有滚动视图和拖动条,需要同时更改它,即如果我通过滚动视图滚动x量,同时拖动条进度应该与滚动视图相同。 - Hitesh Dhamshaniya
自定义视图的init方法中无法正常工作,getLayoutParams返回null。 - JSONParser
在继承的视图类中,此方法(getLayoutParams)返回null。 - mehdi

12

不要试图在构造函数内获取它们,尝试在 onDraw() 方法中调用它们。


16
onDraw不断地被调用吗?在那里执行的任何操作都可能对性能产生负面影响。 - ericosg
1
实际上,我认为最佳做法是监听 onsizechanged 事件,并在那时将宽度和高度放入成员变量中。然后,您可以在您的 ondraw 方法中使用它们而无需再次询问它们。 - David
1
不要在onDraw方法中执行任何繁重的操作。onDraw只用于绘制。 - nutella_eater

10

6
< p > getHeight()getMeasuredHeight() 的区别在于,第一个方法返回的是View的实际高度,第二个方法返回的是View子元素的总高度。换句话说,getHeight() 返回视图高度,getMeasuredHeight() 返回此视图显示其所有元素所需的高度。


两个值可能相同吗?我得到了相同的值,这可能吗? - Hitesh Dhamshaniya
当然可以是一样的。例如,如果你的孩子和父母身高一样。 - OFFmind

1

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

如果你在onCreateonResume中调用它们,视图还没有被绘制出来。你必须在视图被绘制后再调用它们。


我在询问getMeasuredHeight()和getHeight()之间的区别。好的,那么我该如何获取屏幕的宽度和高度呢? - Rohith Nandakumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接