8

我在方法的自定义视图中调用 getHeight 和 getWidth onDraw()getHeight()返回1,073,742,549getWidth()返回1,073,742,304。但是,当我查看屏幕高度和宽度的显示指标时,我分别得到 800 和 480。getHeight 和 getWidth 返回什么?

我正在获取视图的尺寸,因此我可以选择将在视图中显示的位图的尺寸。

谢谢。

4

4 回答 4

11

没有明确解决你的问题,但奇怪的是:

Width:
1,073,742,304 == 0x400001E0
          480 == 0x000001E0

Height:
1,073,742,549 == 0x400002D5
          725 == 0x000002D5

这个自定义视图有可能是大约 725 x 480 吗?我不知道额外的 0x40000000 是从哪里来的,但看起来除了 1 位之外它几乎是正确的 :)

于 2012-04-09T23:42:06.933 回答
5

getHeight()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

于 2012-04-09T23:36:57.510 回答
3

也许,您在自定义视图中做了类似的事情。

final int desiredHSpec = MeasureSpec.makeMeasureSpec(pixelHeight, MeasureSpec.MODE_CONSTANT);
final int desiredWSpec = MeasureSpec.makeMeasureSpec(pixelWidth, MeasureSpec.MODE_CONSTANT);
setMeasuredDimension(desiredWSpec, desiredHSpec);

像这样的Android:为什么在自定义视图中覆盖onMeasure()后,视图的文本不能在RalativeLayout中显示?

如果你把它改成

setMeasuredDimension(width, height);

,您将在 onSizeChanged() 和 onLayout() 上获得简单的小宽度、高度。

于 2012-12-21T09:00:34.317 回答
0

我也有这个问题。我解决它的方法是覆盖 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());
    }
于 2013-07-20T18:06:41.940 回答