Jays
Jays

Reputation: 143

View getHeight() and getWidth() return values too large

I call getHeight and getWidth in a custom view in the onDraw() method. getHeight() returns 1,073,742,549 and getWidth() returns 1,073,742,304. However, when I look at the display metrics for the screen's height and width, I get 800 and 480 respectively. What is getHeight and getWidth returning?

I'm getting the dimensions of my view so I can choose the dimensions of a bitmap that'll go in the view.

Thanks.

Upvotes: 9

Views: 3600

Answers (4)

jmarhuen
jmarhuen

Reputation: 101

I also had this problem. The way I solved it was overriding the onMeasure method. This way the view always has the same size. For example, If you want the view to have the size and width of the screen you should do something like this:

    @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());
    }

Upvotes: 0

19 Lee
19 Lee

Reputation: 108

Maybe, you did something like this in your custom view.

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

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

If you change it into

setMeasuredDimension(width, height);

, you will get simple small width, height on your onSizeChanged() and onLayout().

Upvotes: 3

EdChum
EdChum

Reputation: 393963

getHeight() and getWidth() return the size in pixels see http://developer.android.com/reference/android/view/View.html#getHeight%28%29

The extra size is likely to be coming from the View.MeasureSpec constant EXACTLY see http://developer.android.com/reference/android/view/View.MeasureSpec.html#getSize%28int%29

Upvotes: 5

Tim
Tim

Reputation: 35923

Doesn't explicitly solve you're problem, but curiously:

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

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

Any chance this custom view is roughly 725 x 480? I have no idea where that extra 0x40000000 came from, but it looks like it could be almost right except for 1 bit :)

Upvotes: 11

Related Questions