Как соотносятся dp, dip, dpi, ppi, пиксели и дюймы? - PullRequest
25 голосов
/ 12 декабря 2011

Я читал измерения dp, dip, px, sp , но у меня все еще есть некоторые вопросы о dp / dpi против ppi против px против дюйма.Я не могу их сравнить ... дюйм самый большой?

Говорят, что 160 точек на дюйм означает 160 пикселей на один дюйм.Означает ли это, что 1 дюйм содержит 160 пикселей?

Они также говорят, что 1 пиксель на экране 160 dpi = 1 dp.Означает ли это, что 1 пиксель и 1 dp равны?

И, наконец, почему мы должны использовать dp вместо px?Я понимаю, что это идеально, но почему ?

Ответы [ 5 ]

44 голосов
/ 12 декабря 2011

Вы должны (почти) всегда использовать гибкие единицы измерения размеров, такие как dp, который зависит от плотности пикселей, потому что 300px на одном устройстве не обязательно соответствует размеру экрана на экране, как 300px на другом. Самое большое практическое значение заключается в том, что ваш макет будет значительно отличаться на устройствах с плотностью, отличной от той, на которую ориентирован ваш дизайн.

  • dp или dip означает независимые от плотности пиксели
  • dpi или ppi означает число точек (или пикселей) на дюйм
  • inch - это физическое измерение, связанное с фактическим размером экрана
  • px означает пиксели - пиксель заполняет произвольное количество области экрана в зависимости от плотности.

Например, на экране 160dpi, 1dp == 1px == 1/160in, но на экране 240dpi, 1dp == 1.5px. Так что нет, 1dp != 1px. Существует точно один случай при 1dp == 1px, и это на экране 160dpi. Физические единицы измерения, такие как дюймы, не должны никогда быть частью вашего дизайна, то есть, если вы не делаете линейку.

Простая формула для определения количества пикселей, с которыми работает 1dp: px = dp * (dpi / 160).

5 голосов
/ 14 сентября 2016

dp - это физическое измерение в дюймах.(Да, это так. Читайте дальше.)

"Точность соответствует физическому размеру пикселя при 160 dpi" (https://developer.android.com/training/multiscreen/screendensities.html#TaskUseD)

Физический размер пикселя при 160 dpiровно 1/160 дюйма. Поэтому размер dp составляет 1/160 дюйма. 160 dp = 1 дюйм.

Px - это несколько произвольная единица измерения на экране.

Примеры того, во что преобразуется dp в px на разных устройствах, см. Здесь:

https://stackoverflow.com/a/39495538/984003

4 голосов
/ 17 июня 2015

Как соотносятся dp, dip, dpi, ppi, пиксели и дюймы?

Для целей разработки Android:

dp = dip
dpi = ppi
inch x dpi = pixels
dp = 160 x inch
dp = 160*pixels/dpi

Итак, наТелефон с разрешением 160 точек на дюйм (mdpi):

2 inches = 320 dp
2 inches = 320 pixels

На телефоне с разрешением 180 точек на дюйм:

2 inches = 320 dp
2 inches = 360 pixels

Обратите внимание, что 2 дюйма составляет ВСЕГДА 320 точек на дюйм, независимо от размера экрана.Дп - это физическое расстояние 1/160 дюйма.

Интересна формула дп в пикселях:

dp = 160*pixels/dpi

Эквивалентно:

dp = pixels/(dpi/160)

dpi/160 является интересным фактором.Это относительная плотность по сравнению с корзиной mdpi для Android и величина, на которую вы должны масштабировать графику для различных корзин ресурсов.Вы увидите, что этот коэффициент упоминался несколько раз на этой странице, 0,75 - это коэффициент для ldpi.

1 голос
/ 28 ноября 2015

Я объясню на примере.

float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

плотность равна

.75 on ldpi (120 dpi)
1.0 on mdpi (160 dpi; baseline)
1.5 on hdpi (240 dpi)
2.0 on xhdpi (320 dpi)
3.0 on xxhdpi (480 dpi)
4.0 on xxxhdpi (640 dpi)

так, например,

У меня Samsung S5 с 432 dpi (http://dpi.lv/#1920×1080@5.1″).

Итак, density = 432/160 = phone's dpi/baseline = 2.7

Допустим, мой верхний бар - 48dp. Это ссылка на baseline (160dpi).

Итак, с моим S5 это будет 48dp * 2.7.

Тогда, если я хочу увидеть фактическую высоту:

Это будет (48dp * 2.7) / 432 dpi = 0.3 inches.

0 голосов
/ 12 декабря 2011

DP - это разрешение, когда учитывается только физический размер экрана. Когда вы используете DP, он масштабирует ваш макет на другие экраны аналогичного размера с разной плотностью пикселей.

Иногда вам действительно нужны пиксели, а когда вы работаете с измерениями в коде, вы всегда имеете дело с реальными пикселями, если вы не конвертируете их.

...