How to get screen width and height

AndroidAndroid LayoutAndroid EmulatorAndroid ActivityAndroid Widget

Android Problem Overview


I tried to use following code to get screen width and height in android app development:

Display display = getWindowManager().getDefaultDisplay(); 
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();

but I got NullPointerException for my display, why? how to get screen width and height then?

Android Solutions


Solution 1 - Android

If you're calling this outside of an Activity, you'll need to pass the context in (or get it through some other call). Then use that to get your display metrics:

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

UPDATE: With API level 17+, you can use getRealSize:

Point displaySize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);

If you want the available window size, you can use getDecorView to calculate the available area by subtracting the decor view size from the real display size:

Point displaySize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);

Rect windowSize = new Rect();
ctivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(windowSize);

int width = displaySize.x - Math.abs(windowSize.width());
int height = displaySize.y - Math.abs(windowSize.height());
return new Point(width, height);

getRealMetrics may also work (requires API level 17+), but I haven't tried it yet:

DisplayMetrics metrics = new DisplayMetrics();
activity.GetWindowManager().getDefaultDisplay().getRealMetrics(metrics);

Solution 2 - Android

Within an activity, you can call:

int width = this.getResources().getDisplayMetrics().widthPixels;
int height = this.getResources().getDisplayMetrics().heightPixels;

When you're in a View, then you need to get the Context first:

int width = getContext().getResources().getDisplayMetrics().widthPixels;
int height = getContext().getResources().getDisplayMetrics().heightPixels;

This will work in all Android version, available since API 1, and never deprecated.

Solution 3 - Android

From service:

Display  display= ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth(); 
int height = display.getHeight(); 

Solution 4 - Android

This is what finally worked for me:

DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

Solution 5 - Android

Try via context.getResources().getDisplayMetrics() if you have a context available.

Solution 6 - Android

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

int height = metrics.heightPixels;
int width = metrics.widthPixels;

i guess the code which you wrote is deprecated.

Solution 7 - Android

if (Build.VERSION.SDK_INT >= 11) {
		Point size = new Point();
		try {
			this.getWindowManager().getDefaultDisplay().getRealSize(size);
			screenWidth = size.x;
			screenHeight = size.y;
		} catch (NoSuchMethodError e) {
			 screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
			 screenWidth=this.getWindowManager().getDefaultDisplay().getWidth();
		}

	} else {
		DisplayMetrics metrics = new DisplayMetrics();
		this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
		screenWidth = metrics.widthPixels;
		screenHeight = metrics.heightPixels;
	}

Solution 8 - Android

Try with the following code to get width and height of screen

int widthOfscreen =0;
int heightOfScreen = 0;
DisplayMetrics dm = new DisplayMetrics();
		try {
			((Activity) context).getWindowManager().getDefaultDisplay()
					.getMetrics(dm);
		} catch (Exception ex) {
		}
		 widthOfscreen  = dm.widthPixels;
heightOfScreen  = dm.heightPixels;

Solution 9 - Android

WindowManager w = getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);

Log.d("WIDTH: ", String.valueOf(d.getWidth()));
Log.d("HEIGHT: ", String.valueOf(d.getHeight()));

Solution 10 - Android

       /*
        *DisplayMetrics: A structure describing general information about a display, such as its size, density, and font scaling.
        * */
   
 DisplayMetrics metrics = getResources().getDisplayMetrics();

       int DeviceTotalWidth = metrics.widthPixels;
       int DeviceTotalHeight = metrics.heightPixels;

Solution 11 - Android

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

Solution 12 - Android

Display display = getActivity().getWindowManager().getDefaultDisplay(); 
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
Log.d("Tag", "Getting Width >> " + screenWidth);
Log.d("Tag", "Getting Height >> " + screenHeight);

This worked properly in my application

Solution 13 - Android

Alternative way using function

private int[] getScreenSIze(){
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int h = displaymetrics.heightPixels;
        int w = displaymetrics.widthPixels;

        int[] size={w,h};
        return size;

    }

on button click or on your create function add the following code

int[] screenSize= getScreenSIze();
        int width=screenSize[0];
        int height=screenSize[1];
        screenSizes.setText("Phone Screen sizes \n\n  width = "+width+" \n Height = "+height);

See demo source code

Solution 14 - Android

below answer support api level below and above 10

 if (Build.VERSION.SDK_INT >= 11) {
            Point size = new Point();
            try {
                this.getWindowManager().getDefaultDisplay().getRealSize(size);
                screenWidth = size.x;
                screenHeight = size.y;
            } catch (NoSuchMethodError e) {
                 screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
                 screenWidth=this.getWindowManager().getDefaultDisplay().getWidth();
            }
    
        } else {
            DisplayMetrics metrics = new DisplayMetrics();
            this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
            screenWidth = metrics.widthPixels;
            screenHeight = metrics.heightPixels;
        }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLeemView Question on Stackoverflow
Solution 1 - AndroidareylingView Answer on Stackoverflow
Solution 2 - AndroidKhulja Sim SimView Answer on Stackoverflow
Solution 3 - AndroidMaidulView Answer on Stackoverflow
Solution 4 - AndroidfritzView Answer on Stackoverflow
Solution 5 - AndroidMrJreView Answer on Stackoverflow
Solution 6 - AndroidHouseflyView Answer on Stackoverflow
Solution 7 - AndroidSujith ManjavanaView Answer on Stackoverflow
Solution 8 - AndroidSunil Kumar SahooView Answer on Stackoverflow
Solution 9 - AndroidDallinDyerView Answer on Stackoverflow
Solution 10 - AndroidIntelliJ AmiyaView Answer on Stackoverflow
Solution 11 - AndroidAxxelView Answer on Stackoverflow
Solution 12 - AndroidRudolf CoutinhoView Answer on Stackoverflow
Solution 13 - AndroidDaniel NyamasyoView Answer on Stackoverflow
Solution 14 - AndroidRahulView Answer on Stackoverflow