Gavin
Gavin

Reputation: 2365

Android getDisplayMetrics() not returning accurate display size

I'm trying to get the pixel width/height of the device for placing elements and mapping touch events on the screen but not getting the desired effect (notice lower right square should be completely flush with the bottom right):

White square should be flush in the lower right corner

// screen size
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    float ScrDensity = metrics.density;
    int metricHeight = metrics.heightPixels;//
    int metricWidth = metrics.widthPixels;//

    Log.i("AllMetrics", metrics.toString());

    // temp
    int rightButton_diameter = 100;
    int rightButton_xpos = metricWidth - rightButton_diameter;
    int rightButton_ypos = metricHeight - rightButton_diameter;

Where AllMetrics returns:

DisplayMetrics{density=2.0, width=720, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0}

I notice that the returned height is also different from the 720x1280 listed in the Virtual Device Manager (API 19, Android 4.4) and the x/y positions of the touch events seems accurate to the drawn elements (ie the clickable area of the button is the same as where it is being drawn)

Is this a configuration error or am I using the incorrect method of fetching screen position?

Upvotes: 2

Views: 5390

Answers (2)

Yogesh Rathi
Yogesh Rathi

Reputation: 6499

Check this code it works for me

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;

Outside of activity you can try this

 ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm)

Upvotes: 4

shekhar pande
shekhar pande

Reputation: 1228

To access the DisplayMetrics members, initialize an object like this:

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics);

Upvotes: 0

Related Questions