Android: получить разрешение экрана / пикселей в виде целочисленных значений - PullRequest
10 голосов
/ 25 мая 2010

это действительно простой вопрос, на который я не нашел ответа: / Как я могу быстро получить доступ к разрешению экрана (ширина, высота) в виде целочисленных значений?

Я пробовал этот, нона моем эмуляторе всегда отображается ноль:

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

В моем случае я хочу динамически создать таблицу с tableRows, каждый из которых содержит два столбца.Все эти поля должны заполнить половину экрана по ширине.

Может кто-нибудь дать мне подсказку?

Ответы [ 5 ]

35 голосов
/ 16 февраля 2012

Правильный ответ на вопрос trashkalmar.

Однако результаты будут зависеть от контекста деятельности. Если вы хотите разрешение экрана всего устройства:

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;

Обратите внимание, что результаты также зависят от текущей ориентации устройства.

18 голосов
/ 27 февраля 2011

Метрики экрана можно получить следующим образом:

Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = d.getWidth();
int height = d.getHeight();
5 голосов
/ 09 августа 2014

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

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

2.Это также может быть использовано, но требуется проверка уровня API, встроенная

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.Используйте это, когда вы не заняты, но имеете контекст

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();
}
4 голосов
/ 18 января 2012

Я использую следующее:

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

Без суеты, без суеты, только 2 переменные класса

3 голосов
/ 25 мая 2010

Самый простой способ будет реализовать onSizeChanged . Вы, вероятно, получаете значение 0, потому что представление еще не инициализировано. Вы не можете вызвать вышеуказанный код в конструкторе View, например.

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