Как получить размер экрана устройства? - PullRequest
6 голосов
/ 27 июля 2011

Желание имеет 480 x 800 пикселей, 3,7 дюйма, а HD имеет разрешение 480 x 800 пикселей, 4,3 дюйма.

Я запускаю код, который принимается как ответ из этой темы Какполучить размер экрана устройства? но это неправильно! Например, для экрана размером 3,7 дюйма возвращается 2,4, что очень неправильно!

Кто-нибудь знает, как получить реальный размер экрана?мне не нужно разрешение Мне нужен размер экрана в дюймах.

ПРИМЕЧАНИЕ: этот код неверен (по крайней мере, у меня не работает)

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //give me 320
int height = dm.heightPixels; //give me 533

У меня HTC Desireи мое разрешение составляет 480 х 800 пикселей!

Я знаю, что я глуп!и, очевидно, я делаю что-то не так, но может кто-нибудь подсказать мне, как получить реальный размер экрана в дюймах и получить реальное разрешение устройства?

Спасибо

Ответы [ 4 ]

15 голосов
/ 27 июля 2011

ОК, наконец, я нашел, в чем моя проблема

Да, этот код работает нормально, но я не возвращаю пиксели, он возвращает DIP (независимые от плотности пикселей), что не совпадает!

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //320 dip
int height = dm.heightPixels; //533 dip

Что мне было нужно, это РЕАЛЬНЫЕ пиксели, и расчет для них выглядит так:

int widthPix = (int) Math.ceil(dm.widthPixels * (dm.densityDpi / 160.0));

теперь widthPix равно 480!

8 голосов
/ 21 октября 2011

Я нашел ваш вопрос, и это заставило меня задуматься, почему я определенно НЕ вижу этого эффекта ни на одном устройстве, на котором я работаю или тестирую с помощью ... getWidth () / getHeight () возвращают точные экстенты используемого экрана , Я подозреваю, что другие тоже окажутся здесь, добавив код, который вызовет больше путаницы и не поймет причину.

Оказывается, это именно то, что происходит , если вы явно отключите предварительное масштабирование См. второй пункт этого документа . (Быстрый поиск в Google по слову «320x533» обнаружил множество других людей, которые сталкивались с этим.) Избавьтесь от предварительного масштабирования, и расхождение должно исчезнуть (getWidth () / getHeight () вернет фактический размер, а не масштабированный размер.

Примечание для разработчиков планшетов: getWidth () / getHeight () не будет возвращать необработанный размер экрана, потому что нижняя полоса (48 пикселей или около того) не является частью области, в которую приложение может рисовать. Вы получите размер всего, на что вы сможете нарисовать (например, 1280x752 вместо полных 1280x800 в ландшафтном режиме). Опять же, отсутствие предварительного масштабирования означает, что эти значения являются точными и точными.

0 голосов
/ 21 декабря 2013

Отключите предварительное масштабирование, добавив эту строку в файл манифеста:

<supports-screens android:anyDensity="true" />

Позиция:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="...."
  android:versionCode="1"
  android:versionName="1.0">

<supports-screens android:anyDensity="true" />

<application android:label="@string/app_name" >
...
0 голосов
/ 14 июля 2012

Попробуйте использовать Display класс вместо DisplayMetrics.

Display dispOb = getWindowManager().getDefaultDisplay();
String widthAndHeight= dispOb.getWidth()+"X"+dispOb.getHeight();
...