Подтвердить что ты не робот

Размер экрана для Android с одинаковой плотностью

Я запутался в отношении плотностей. Я вижу, что при средней плотности разрешение экрана может быть 320x480, 480x800 или 480x854. Итак, если у меня есть изображение размером 300 пикселей в папке mdpi, как оно будет выглядеть одинаково на всех трех разных размерах экрана (в основном 320x480 против других 2)? И, посмотрев такой же размер, я имею в виду масштаб, который будет больше или меньше, в зависимости от размера экрана. Спасибо.

4b9b3361

Ответ 1

Здесь понимаются три различные, но связанные понятия: плотность экрана (пиксели на дюйм/сантиметр или обычно называемые DPI от точек на дюйм в принтерах), размер физического экрана (в сантиметрах или сантиметрах) и количество пикселей ( также известный как разрешение, в пикселях).

Эти термины не взаимозаменяемы, и вам нужно понять, как они взаимосвязаны, чтобы не путать с проблемой. Как правило, вы можете игнорировать размер физического экрана, поскольку это уже учитывается в плотности. Например, экран шириной 3 дюйма и разрешением 300 пикселей будет иметь значение DPI 100. Кроме того, экраны телефонов имеют примерно одинаковый физический размер, даже если количество пикселей сильно отличается.

Итак, рассмотрим экран G1 или Hero, который имеет разрешение 480x320 и плотность около 160 точек на дюйм. Изображение шириной 300 пикселей будет 1,875 дюйма в поперечнике. Это вычисляется по размеру пикселя (300)/плотность (160). Теперь, если вы сравните это с экраном Nexus One, Droid или аналогичным, эти модели имеют экран с более высоким разрешением около 800x480 с высокой плотностью около 240 точек на дюйм. Если вы показываете одно и то же изображение шириной 300 пикселей, теперь оно будет отображаться только физически на расстоянии примерно один и четверть дюйма в поперечнике. Другими словами, он будет намного меньше. Это может быть проблемой, потому что если изображение содержит текст, текст может быть недоступен для чтения.

Android может быть предложено автоматически масштабировать изображения, чтобы они соответствовали этим различным экранам, чтобы он по-прежнему выглядел одинакового размера. Это делается путем установки размеров в независимых размерах пикселей. Если что-то будет шириной 100dp, оно будет шириной 100px на экране средней плотности. На экране с высокой плотностью он будет иметь ширину 150 пикселей, но они будут выглядеть примерно одинаково на реальном экране. Однако, если вы сделаете это, ваше изображение может немного расплыться. Это то же самое, что при приближении к фотографии слишком близко к программе просмотра изображений; края становятся размытыми, так как они "растягивают" их при масштабировании.

Способом решения этой проблемы является использование папок mdpi, hdpi и т.д. Вы даете Android изображение, которое уже было масштабировано, так что ему не нужно делать это самостоятельно. Очевидно, что если вы просто растянете изображение самостоятельно в Photoshop, то это будет выглядеть не лучше. Но обычно один из них изменяет размеры очень больших изображений, чтобы они соответствовали мобильному экрану. В этом случае вы просто изменяете их по три раза, каждый в другое разрешение.

Итак, чтобы наконец ответить на ваш конкретный вопрос: если у вас есть изображение, размещенное в вашей папке mdpi, оно будет точно такого же размера, независимо от разрешения экрана, если все они имеют одинаковую плотность. Что изменится, сколько пространства вокруг них, например. изображение шириной 320x320 пикселей заполнило бы большую часть экрана 320x480, но только около трети экрана 480x800. Однако, как отмечалось выше, обычно телефоны с более высоким разрешением также имеют более плотный экран. В этом случае Android не будет выглядеть в вашей папке mdpi для изображения - он перейдет в папку hdpi, и если он не сможет найти его там, он возьмет папку "drawable" по умолчанию. Затем, если вы используете DP, он автоматически масштабирует его, или если вы используете PX, он оставит его как есть, и он будет выглядеть меньше.

Там! Очень длинный ответ для вас. Надеюсь, это имеет смысл.

Ответ 2

Для полноты также проверьте этот параметр для управления компоновкой:

Классификаторы каталога:

Size:         small, normal, large
Density:      ldpi, mdpi, hdpi, nodpi(no auto-scale)
Aspect ratio: long, notlong
Orientation:  land
Применение:
res/layout/my_layout.xml            
res/layout-small/my_layout.xml      
res/layout-large/my_layout.xml      
res/layout-large-long/my_layout.xml      
res/layout-large-land/my_layout.xml     
res/drawable-ldpi/my_icon.png  
res/drawable-mdpi/dpi/my_icon.png  
res/drawable-hdpi/my_icon.png      
res/drawable-nodpi/composite.xml   

Ограничение вашего приложения на определенные размеры экрана (через AndroidManifest):

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<supports-screens
          android:largeScreens="true"
          android:normalScreens="true"
          android:smallScreens="true"
          android:anyDensity="true" />
...
</manifest>

И для tweeking уровня кода:

float scale = getContext().getResources().getDisplayMetrics().density;
И не забывайте:
dpi    = 160; //At 160dpi
pixels = dips * (density / dpi)

Все в этом документе: developer.android.com:Поддержка нескольких экранов

Ответ 3

Итак, если у меня есть изображение размером 300 пикселей в папке mdpi, как это будет выглядят одинаково на всех 3 разных размеры экрана (в основном 320x480 против другое 2)?

Как изображение выглядит физически, зависит от плотности экрана, а не от размера экрана. Ваша папка -mdpi не привязана к размеру экрана - она ​​привязана к плотности экрана.

Ответ 4

Не могли бы вы подтвердить формулу расчета плотности экрана?

Как я читал, следующая формула:

Плотность = SQRT (wp ^ 2 + hp ^ 2)/размер экрана

wp → ширина экрана (в px) hp → высота экрана (в пикселях) размер экрана → Физический размер экрана (диагональные дюймы)

размер экрана (320x480) = SQRT (102400 + 230400)/160 = 3,6 дюйма

размер экрана (480x800) = SQRT (640000 + 230400)/160 = 5,8 дюйма

размер экрана (480x854) = SQRT (729316 + 230400)/160 = 6,12 дюйма

Таким образом, макеты (экраны пользовательского интерфейса) управляются размерами экрана (малые: < 3 ", нормальные < 4", большие > 5 "), а ресурс (изображения), предназначенный для рисования, управляется плотностями экрана.

И размер изображения (в пикселях) не меняется, если плотность экранов (320x480, 480x800 или 480x854) одинаковы.

Не могли бы вы подтвердить?

Спасибо, Ram

Ответ 6

На самом деле код для вычисления физического размера экрана для устройств следующий:

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

double x = Math.pow(dm.widthPixels/dm.xdpi,2);

double y = Math.pow(dm.heightPixels/dm.ydpi,2);

double screenInches = Math.sqrt(x+y);