查看getHeight()和getWidth()返回值太大

时间:2012-04-09 23:33:07

标签: android view viewlayout

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

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

感谢。

4 个答案:

答案 0 :(得分:11)

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

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

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

此自定义视图大概是725 x 480吗?我不知道额外的0x40000000来自哪里,但看起来它几乎是正确的,除了1位:)

答案 1 :(得分: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

答案 2 :(得分:3)

也许,您在自定义视图中执行了类似的操作。

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

像这样Android:Why after override onMeasure() in a custom view, the view's text can't show in RalativeLayout?

如果将其更改为

setMeasuredDimension(width, height);

,你将在onSizeChanged()和onLayout()上得到简单的小宽度,高度。

答案 3 :(得分: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());
    }