Как соотносятся dp, dip, dpi, ppi, пиксели и дюймы?
Я читал измерения dp, dip, px, sp, но у меня все еще есть вопросы о dp/dpi против ppi против px против дюйма. Я не могу их сравнить... один дюйм самый большой?
Говорят, 160 точек на дюйм означает 160 пикселей на один дюйм. Означает ли это, что 1 дюйм содержит 160 пикселей?
Они также говорят, что 1 пиксель на экране 160 точек на дюйм = 1 dp. Означает ли это, что 1 пиксель и 1 дп равны?
И наконец, почему мы должны использовать dp вместо px? Я понимаю, что это идеально, но почему?
6 ответов
Вы должны (почти) всегда использовать гибкие единицы измерения, такие как 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)
,
Дп это физическое измерение, как в дюймах. (Да, это так. Читайте дальше.)
"Dp соответствует физическому размеру пикселя при 160 dpi" ( https://developer.android.com/training/multiscreen/screendensities.html)
Физический размер пикселя при 160 dpi составляет ровно 1/160 дюйма. Поэтому размер dp составляет 1/160 дюйма. 160 дп = 1 дюйм
Px - это несколько произвольная единица измерения на экране.
Примеры того, что dp преобразует в px на разных устройствах, смотрите здесь:
/questions/25507894/svyaz-mezhdu-dp-sp-i-px/25507916#25507916
Как соотносятся 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 дюйма ВСЕГДА 320dp, независимо от размера экрана. Dp - это физическое расстояние 1/160 дюйма.
Интересна формула дп в пикселях:
dp = 160*pixels/dpi
Эквивалентно:
dp = pixels/(dpi/160)
dpi/160
это интересный фактор. Это относительная плотность по сравнению с корзиной mdpi для Android и величина, на которую вы должны масштабировать графику для различных корзин ресурсов. Вы увидите, что этот коэффициент упоминался несколько раз на этой странице, 0,75 - это коэффициент для ldpi.
Я объясню на примере.
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/).
Так, density = 432/160 = phone's dpi/baseline = 2.7
Допустим, мой верхний бар 48dp
, Это относится к baseline (160dpi)
,
Итак, относительно моего S5, это будет 48dp * 2.7
,
Тогда, если я хочу увидеть фактическую высоту:
Это будет (48dp * 2.7) / 432 dpi = 0.3 inches
,
DP - это разрешение, когда вы учитываете только физический размер экрана. Когда вы используете DP, он будет масштабировать ваш макет на другие экраны аналогичного размера с разной плотностью пикселей.
Однако иногда вам действительно нужны пиксели, а когда вы работаете с измерениями в коде, вы всегда имеете дело с реальными пикселями, если только вы не конвертируете их.
Когда речь идет не об Android, а, скорее, о мониторах, DP на самом деле означает Dot Pitch, который изначально появился на ЭЛТ-мониторах. Это расстояние по диагонали между 2 пикселями в мм. В ЖК-мониторах пиксель больше, и если предположить, что пиксели расположены рядом друг с другом без зазора (обычно есть очень маленький зазор, но для простоты мы предполагаем, что он равен нулю), диагональное расстояние между двумя центрами каждый пиксель равен размеру диагонали пикселя. Чем ниже DP, тем четче изображение.
DP = 25,4 ÷ ppi 0,25 DP является стандартным, неровный край 0,20 DP считается более четким 160 ppi = 0,158 DP
Таким образом, DiP на самом деле является округленным приближением 1000 x DP, и 2 не эквивалентны, просто очень близкие приближения.
Как упоминалось ранее, вы не должны основываться на размере пикселей, поскольку вы можете масштабировать. Это для того, насколько четко что-то будет отображаться на экране.
В мониторах, если вам нужна четкость на 20 дюймов (среднее расстояние между монитором и глазом) (<0,20 DP средней четкости / 0,16 DP сверхчеткости), это будет равняться: 1920 x 1080 (HD) 17,4 дюйма / 14 дюймов 3840x2160 (4K) 35 дюймов / 27,8 дюйма. Телефон с высоким разрешением может иметь DP 0,05 (приблизительно 500 пикселей на дюйм), что в 3 раза выше, чем у сверхчеткого монитора, но при просмотре в 3 раза ближе.
Все, что больше этих размеров для монитора, будет отображаться пиксельным, меньшее будет более четким.
Также стоит отметить, что 72 пикселя на дюйм - это стандарт Mac и очень старый. 96 ppi - это то, на что ссылается разрешение Windows. Photoshop изначально был разработан для Mac.