Как получить размер экрана устройства?

Желание имеет 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 ответа

Решение

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

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

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!

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

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

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

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

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

Попробуйте использовать Display class rather than DisplayMetrics,

Display dispOb = getWindowManager().getDefaultDisplay();
String widthAndHeight= dispOb.getWidth()+"X"+dispOb.getHeight();
Другие вопросы по тегам