Home » Android » android – View getHeight() and getWidth() return values too large

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

Posted by: admin June 15, 2020 Leave a comment

Questions:

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.

How to&Answers:

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 🙂

Answer:

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

Answer:

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

Answer:

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