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

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

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

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

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


person Chandeep    schedule 12.12.2011    source источник
comment
Помните, что многие экраны Android имеют разное разрешение и разную плотность, и посмотрите, поможет ли это: stackoverflow.com/q/2025282/324625< /а>   -  person Steve Blackwell    schedule 12.12.2011
comment
@steve blackwell: я читал это! но я не могу провести сравнение :\   -  person Chandeep    schedule 12.12.2011


Ответы (5)


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

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

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

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

person Chris Cashwell    schedule 12.12.2011
comment
На рынке существует множество плотностей экрана, поэтому вы, безусловно, можете использовать эти расчеты. Я не уверен, почему вы были бы, но вы определенно могли бы. Например, если вы хотите узнать, сколько пикселей с разрешением 300 dp займет экран с разрешением 240 dpi, 300*(240/160) = 450 pixels - person Chris Cashwell; 12.12.2011
comment
@ChrisCashwell, поэтому при создании этих изображений для использования какие числа использовать для их определения? Используйте размер developer.android.com/guide/practices/ui_guidelines/ для ширины и высоты, как предписано, и плотности разрешения? - person Vass; 24.02.2012
comment
@Vass Я обычно делаю изображения большего размера (с более высокой плотностью) и измеряю их в единицах dpi. - person Chris Cashwell; 24.02.2012
comment
@ChrisCashwell, не могли бы вы рассказать мне, как это делается в фотошопе или иллюстраторе? Я вижу только ppi, когда вы начинаете новый документ. - person Vass; 25.02.2012
comment
на самом деле, 1 дюйм составляет около 160 dp, поэтому можно думать об этом как о каком-то измерении... - person android developer; 27.01.2014
comment
Вопрос: подскажите, пожалуйста, чем dp отличается от dpi? - person Tushar Pandey; 16.04.2014
comment
@TusharPandey DP — это независимый от плотности пиксель, а DPI — это количество точек на дюйм. DP относится к абстрактной единице, основанной на плотности пикселей на данном экране, тогда как DPI относится к количеству точек на дюйм. Вы можете получить количество DP на экране, учитывая значение DPI этого экрана. - person Chris Cashwell; 16.04.2014
comment
160 дп = 1 дюйм точно. Из спецификаций Google: dp соответствует физическому размеру пикселя при разрешении 160 dpi. Физический размер пикселя при разрешении 160 dpi составляет ровно 1/160 дюйма. Поэтому 160 dp = 1 дюйм. - person user984003; 14.09.2016
comment
@user984003 user984003 Обратите внимание на разрешение 160 точек на дюйм в исходной статье. Многие устройства имеют плотность экрана, не равную 160 dpi. - person Chris Cashwell; 15.09.2016
comment
на 1dp == 1px == 1in, вы имеете в виду один дюйм? то это конечно неправильно! 1dp == 1/160 дюйма точно - person EmJiHash; 16.09.2017

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

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

Физический размер пикселя при разрешении 160 dpi составляет ровно 1/160 дюйма. Следовательно, размер dp равен 1/160 дюйма. 160 дп = 1 дюйм.

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

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

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

person user984003    schedule 14.09.2016
comment
Мне интересно, почему они придумали эту новую единицу измерения dp, когда они могли бы использовать дюймы или сантиметры. - person Massimo Fazzolari; 19.07.2017
comment
К сожалению, приравнивание dp к физическим размерам больше не является правильным подходом. Многие устройства теперь позволяют изменять уровень масштабирования экрана, а это означает, что 160dp имеет разный физический размер на каждом уровне масштабирования. Они работают, изменяя логическую плотность экрана устройства (320 точек на дюйм, 240 точек на дюйм и т. д.). Итак, если быть точным, 160 dp — это 1 дюйм, когда логическое dpi соответствует физическому dpi (физическим пикселям на дюйм). Обратите внимание, что некоторые из этих устройств по умолчанию не используют 1-кратный зум. Samsung S5e, например, имеет физическую плотность ~ 288 точек на дюйм, но заводская логическая плотность по умолчанию составляет 360 точек на дюйм. - person Christian García; 04.02.2021

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

В целях разработки Android:

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

Итак, на телефоне с разрешением 160 dpi (mdpi):

2 inches = 320 dp
2 inches = 320 pixels

На телефоне с разрешением 180 dpi:

2 inches = 320 dp
2 inches = 360 pixels

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

Формула dp в пиксели интересна:

dp = 160*pixels/dpi

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

dp = pixels/(dpi/160)

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

person Sam    schedule 17.06.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%C3%[email protected]%E2%80%B3).

So, density = 432/160 = phone's dpi/baseline = 2.7

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

Итак, по отношению к моему S5 это будет 48dp * 2.7.

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

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

person kalan nawarathne    schedule 28.11.2015

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

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

person Santhosh Shettigar    schedule 12.12.2011
comment
так что при создании изображения разрешение в пикселях такое же, просто вы меняете физический размер? Итак, при использовании Photoshop вы можете просто установить стандартные 72 пикселя на дюйм, а затем получить правильную ширину / высоту в пикселях? - person Vass; 24.02.2012