Получить ширину и высоту экрана в Android - PullRequest
397 голосов
/ 20 января 2011

Как узнать ширину и высоту экрана и использовать это значение в:

@Override protected void onMeasure(int widthSpecId, int heightSpecId) {
    Log.e(TAG, "onMeasure" + widthSpecId);
    setMeasuredDimension(SCREEN_WIDTH, SCREEN_HEIGHT - 
        game.findViewById(R.id.flag).getHeight());
}

Ответы [ 22 ]

3 голосов
/ 20 марта 2016
Display display = ((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int mWidthScreen = display.getWidth();
int mHeightScreen = display.getHeight();
3 голосов
/ 19 января 2015

Методы, показанные здесь, устарели / устарели, но это все еще работает. Требуется API 13

Проверьте это

Display disp= getWindowManager().getDefaultDisplay();
Point dimensions = new Point();
disp.getSize(size);
int width = size.x;
int height = size.y;
2 голосов
/ 20 ноября 2018

Для пользователя kotlin

fun Activity.displayMetrics(): DisplayMetrics {
   val displayMetrics = DisplayMetrics();
   windowManager.defaultDisplay.getMetrics(displayMetrics);
   return displayMetrics
}

А в Activity вы можете использовать его как

    displayMetrics().let { displayMetrics -> 
        val height = displayMetrics.heightPixels
        val width = displayMetrics.widthPixels
    }

Или во фрагменте

    activity?.displayMetrics()?.run {
        val height = heightPixels
        val width = widthPixels
    }
2 голосов
/ 07 декабря 2017

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

            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Point size = new Point();
            wm.getDefaultDisplay().getRealSize(size);
            final int width = size.x, height = size.y;

И поскольку это может измениться в зависимости от ориентации, вот решение (в Kotlin), чтобы получить его правильно, независимо от ориентации:

/**
 * returns the natural orientation of the device: Configuration.ORIENTATION_LANDSCAPE or Configuration.ORIENTATION_PORTRAIT .<br></br>
 * The result should be consistent no matter the orientation of the device
 */
@JvmStatic
fun getScreenNaturalOrientation(context: Context): Int {
    //based on : http://stackoverflow.com/a/9888357/878126
    val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val config = context.resources.configuration
    val rotation = windowManager.defaultDisplay.rotation
    return if ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) && config.orientation == Configuration.ORIENTATION_LANDSCAPE || (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && config.orientation == Configuration.ORIENTATION_PORTRAIT)
        Configuration.ORIENTATION_LANDSCAPE
    else
        Configuration.ORIENTATION_PORTRAIT
}

/**
 * returns the natural screen size (in pixels). The result should be consistent no matter the orientation of the device
 */
@JvmStatic
fun getScreenNaturalSize(context: Context): Point {
    val screenNaturalOrientation = getScreenNaturalOrientation(context)
    val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val point = Point()
    wm.defaultDisplay.getRealSize(point)
    val currentOrientation = context.resources.configuration.orientation
    if (currentOrientation == screenNaturalOrientation)
        return point
    else return Point(point.y, point.x)
}
1 голос
/ 20 января 2017

Просто используйте функцию ниже, которая возвращает ширину и высоту размера экрана в виде массива целых чисел

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;

    }

В функции onCreate или нажатии кнопки добавьте следующий код для вывода размеров экрана, как показано ниже

 int[] screenSize= getScreenSIze();
        int width=screenSize[0];
        int height=screenSize[1];
        screenSizes.setText("Phone Screen sizes \n\n  width = "+width+" \n Height = "+height);
0 голосов
/ 12 ноября 2018

Ни один из ответов здесь не работает правильно для нескольких дисплеев Chrome OS или для будущих складных складок.

При поиске текущей конфигурации всегда используйте конфигурацию из текущей активности в getResources().getConfiguration(). Не используйте конфигурацию из фоновой операции или из системного ресурса. Фоновая операция не имеет размера, и конфигурация системы может содержать несколько окон с конфликтующими размерами и ориентациями , поэтому никакие полезные данные не могут быть извлечены.

Таким образом, ответ

val config = context.getResources().getConfiguration()
val (screenWidthPx, screenHeightPx) = config.screenWidthDp.dp to config.screenHeightDp.dp
0 голосов
/ 05 июня 2018

Попробуйте этот код для Kotlin

 val display = windowManager.defaultDisplay
 val size = Point()
 display.getSize(size)
 var DEVICE_WIDTH = size.x
 var DEVICE_HEIGHT = size.y
0 голосов
/ 02 марта 2018

Два шага.Во-первых, продлите класс активности

class Example extends Activity

Во-вторых: используйте этот код

 DisplayMetrics displayMetrics = new DisplayMetrics();
 WindowManager windowmanager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
 windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
 int deviceWidth = displayMetrics.widthPixels;
 int deviceHeight = displayMetrics.heightPixels;
0 голосов
/ 01 марта 2018

Это набор утилит для работы с абстракцией размера в Android.

Содержит класс SizeFromDisplay.java Вы можете использовать его следующим образом:

ISize size = new SizeFromDisplay(getWindowManager().getDefaultDisplay());
size.width();
size.hight();
0 голосов
/ 13 февраля 2018

Разрешение экрана - общее количество пикселей на экране. Следующая программа извлечет разрешение экрана устройства. Он напечатает ширину и высоту экрана. Эти значения в пикселях.

public static Point getScreenResolution(Context context) {
// get window managers
WindowManager manager =  (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);

 // get width and height
 int width = point.x;
 int height = point.y;

 return point;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...