Как узнать ширину и высоту экрана - PullRequest
52 голосов
/ 29 июня 2011

Я пытался использовать следующий код для получения ширины и высоты экрана при разработке приложений для Android:

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

, но я получил NullPointerException для моих display, почему?как узнать ширину и высоту экрана тогда?

Ответы [ 14 ]

126 голосов
/ 29 июня 2011

Если вы вызываете это вне Activity, вам нужно передать контекст (или получить его через какой-то другой вызов). Затем используйте это, чтобы получить ваши показатели отображения:

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

ОБНОВЛЕНИЕ: с уровнем API 17+ вы можете использовать getRealSize:

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

Если вы хотите, чтобы доступный размер окна, вы можете использовать getDecorView для вычисления доступной площади, вычитая размер вида декора из реального размера дисплея:

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 также может работать (требуется уровень API 17+), но я еще не пробовал:

DisplayMetrics metrics = new DisplayMetrics();
activity.GetWindowManager().getDefaultDisplay().getRealMetrics(metrics);
34 голосов
/ 17 октября 2013

В рамках действия вы можете позвонить:

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

Когда вы находитесь в представлении, вам сначала нужно получить контекст:

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

Это будет работатьвсе версии Android, начиная с API 1 и никогда не устарели.

18 голосов
/ 29 июня 2011

Из службы:

Display  display= ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth(); 
int height = display.getHeight(); 
15 голосов
/ 09 июня 2012

Вот что у меня наконец получилось:

DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
11 голосов
/ 29 июня 2011

Попробуйте через context.getResources().getDisplayMetrics(), если у вас есть контекст.

7 голосов
/ 07 мая 2012
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

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

Полагаю, код, который вы написали, устарел.

4 голосов
/ 07 сентября 2013
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;
    }
2 голосов
/ 20 августа 2015
       /*
        *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;
2 голосов
/ 30 июня 2011
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()));
2 голосов
/ 29 июня 2011

Попробуйте использовать следующий код, чтобы получить ширину и высоту экрана

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;
...