Android: Get the screen resolution / pixels as integer values
Asked Answered
M

5

11

this is a really simple question on which I've found no answer :/ How can I quickly access the screen resolution (width, height) as integer values?

I've tried this one, but it always shows zero on my emulator:

DisplayMetrics dm = new DisplayMetrics();
int width = dm.widthPixels / 2;

In my case I want to dynamically create a table with tableRows, each containing two cols. This cols all shall fill half of the screen in width.

Can someone give me a hint?

Microscopium answered 25/5, 2010 at 7:3 Comment(2)
just a guess - the values retrieved from DisplayMetrics may not be valid until first draw. are you checking this on onCreate or onDraw or when?Eliathan
The real reason why the result was zero is because zero is the default value in java for an int. dm.widthPixels was not initialized so it's value is zero and zero divided by two is also zero... you should have tried something like mView.getContext().getResources().getDisplayMetrics()Pokelogan
K
3

The easiest way will be to implement onSizeChanged. You are probably getting a value of 0 because the view hasn't initialized yet. You can't call the above code in the View constructor for example.

Karli answered 25/5, 2010 at 7:15 Comment(2)
so what does this mean for me, when I dynamically want to add TableRows and after finishing add the table to the main LinearLayout and set this one to ContentView (by using this.setContentView(ll), where ll is my linearLayout?Microscopium
onSizeChanged will be called the first time your View is drawn and whenever the orientation changes. When it is called, store the dimensions of the screen in members of your classes. Use these values when you are drawing (in the OnDraw method).Karli
V
36

The trashkalmar answer is correct.

However, the results will be specific to the activity context. If you want the whole device screen resolution:

DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut
wm.getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;

Note that the results also depend on the current device orientation.

Vestryman answered 16/2, 2012 at 18:3 Comment(0)
S
18

You can get screen metrics in this way:

Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = d.getWidth();
int height = d.getHeight();
Synagogue answered 27/2, 2011 at 20:24 Comment(2)
I get a @deprecated warning, with no further explanation. used Guillaume Perrot's answer insteadBrumaire
@Moak, it was deprecated since Android API 13. See the docs.Lollapalooza
A
8

1.Simply use This inside activity to get screen width and height pixels.

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

2.This can also be used But requires Api level inlined check

Display display = getWindowManager().getDefaultDisplay();

Point size = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    display.getSize(size);
    int width2 = size.x;
    int height2 = size.y;

} else {
    int width2 = display.getWidth();
    int height2 = display.getHeight();
}

3.Use This when you are not in activity but having context

WindowManager wm = (WindowManager) context.getSystemService(
            Context.WINDOW_SERVICE);
Display display1 = wm.getDefaultDisplay();
Point size1 = new Point();

int width1;
int height1;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {

    display1.getSize(size1);
    width1 = size1.x;
    height1 = size1.y;

} else {
    width2 = display.getWidth();
    height2 = display.getHeight();
}
Ankara answered 9/8, 2014 at 6:32 Comment(0)
O
4

I use the following:

int scrWidth  = getWindowManager().getDefaultDisplay().getWidth();
int scrHeight = getWindowManager().getDefaultDisplay().getHeight();

No muss, no fuss, just 2 class variables

Oat answered 18/1, 2012 at 18:21 Comment(0)
K
3

The easiest way will be to implement onSizeChanged. You are probably getting a value of 0 because the view hasn't initialized yet. You can't call the above code in the View constructor for example.

Karli answered 25/5, 2010 at 7:15 Comment(2)
so what does this mean for me, when I dynamically want to add TableRows and after finishing add the table to the main LinearLayout and set this one to ContentView (by using this.setContentView(ll), where ll is my linearLayout?Microscopium
onSizeChanged will be called the first time your View is drawn and whenever the orientation changes. When it is called, store the dimensions of the screen in members of your classes. Use these values when you are drawing (in the OnDraw method).Karli

© 2022 - 2024 — McMap. All rights reserved.