我在自定义视图的onDraw()
方法中调用getHeight()
和getWidth()
。其中,getHeight()
返回1,073,742,549
,getWidth()
返回1,073,742,304
。但是,当我查看屏幕高度和宽度的显示指标时,分别得到800和480。请问getHeight()
和getWidth()
返回的是什么?
我获取视图的尺寸是为了选择放置于视图中的位图的尺寸。
谢谢。
我在自定义视图的onDraw()
方法中调用getHeight()
和getWidth()
。其中,getHeight()
返回1,073,742,549
,getWidth()
返回1,073,742,304
。但是,当我查看屏幕高度和宽度的显示指标时,分别得到800和480。请问getHeight()
和getWidth()
返回的是什么?
我获取视图的尺寸是为了选择放置于视图中的位图的尺寸。
谢谢。
虽然它并没有明确解决你的问题,但有趣的是:
Width:
1,073,742,304 == 0x400001E0
480 == 0x000001E0
Height:
1,073,742,549 == 0x400002D5
725 == 0x000002D5
这个自定义视图是725 x 480吗?我不知道那个额外的0x40000000是从哪里来的,但是看起来除了1位以外几乎是正确的 :)
View.MeasureSpec.getSize(getWidth())
(高度也是如此)。MeasureSpec 可以在顶部字符中发出其他信号,如果有什么变化,它可能会在以后咬你(比如如果它报告 0x8000xxxx)。 - TimgetHeight()
和getWidth()
返回以像素为单位的大小,请参阅http://developer.android.com/reference/android/view/View.html#getHeight%28%29。View.MeasureSpec
常量EXACTLY
,请参见http://developer.android.com/reference/android/view/View.MeasureSpec.html#getSize%28int%29。final int desiredHSpec = MeasureSpec.makeMeasureSpec(pixelHeight, MeasureSpec.MODE_CONSTANT);
final int desiredWSpec = MeasureSpec.makeMeasureSpec(pixelWidth, MeasureSpec.MODE_CONSTANT);
setMeasuredDimension(desiredWSpec, desiredHSpec);
像这样 Android:为什么在自定义视图中重写onMeasure()后,视图的文本不能显示在RelativeLayout中?
如果你把它改成
setMeasuredDimension(width, height);
在onSizeChanged()和onLayout()方法中,您将获得简单的小宽度和高度。
我也遇到了这个问题。我解决的方法是重写onMeasure方法。这样视图始终具有相同的大小。例如,如果您希望视图具有屏幕的大小和宽度,则应执行以下操作:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
WindowManager wm = (WindowManager)this.getContext().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
//display.getWidth() and display.getHeight() return the screen dimensions
this.setMeasuredDimension(display.getWidth(), display.getHeight());
}