dobridog
dobridog

Reputation: 380

Android DisplayMetrics display absolute size varies with orientation

Has anyone noticed this issue and resolved the way of getting the absolute display size consistently in both orientations?

Example, Nexus 5 (5.0.1):

I would have thought that the height in portrait would match the width in landscape. Initially suspected the status bar, but docs are clear. Anyway the status bar height in this example is 75px in either orientation and the diff in the example is 18px.

Code snippet for display width and height in pixels:

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

String dimensions = String.format("width = %d height = %d", width, height);
Log.v(TAG, dimensions);

Upvotes: 1

Views: 3216

Answers (2)

Eugen Pechanec
Eugen Pechanec

Reputation: 38223

Assuming the display is FullHD acording to your logging there's something of 144px (48dp) height in portrait and 126px (42dp) width in landscape occupying the display (when scaling factor is 3 which is xxhdpi). I bet it's the navigation bar with Back, Home and Recent buttons. This is sufficient for choosing layouts.

EDIT:

If you need the full display size the following code is available from API 17:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT >= 17) {
    display.getRealSize(size);
} else {
    display.getSize(size); // correct for devices with hardware navigation buttons
}

EDIT2:

If you want to make sure you get correct result on API 14 through 16 consider following this answer along with its comments https://stackoverflow.com/a/11004877/2444099 .

Upvotes: 4

Andrew S
Andrew S

Reputation: 2987

It's not the entire screen size, its the size of the UI that display metrics gives you. You have to factor in the amount of screen size taken up by the area taken up by the status bar (clock, battery level, signal strength bar) which will differ on orientation.

Upvotes: 0

Related Questions