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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Как относятся отношения 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 to pixels:

dp = 160*pixels/dpi

Является эквивалентным:

dp = pixels/(dpi/160)

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

Ответ 3

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

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

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

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

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

fooobar.com/questions/258262/...

Ответ 4

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

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

Ответ 5

Я объясню, используя пример.

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×[email protected]").

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

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

Итак, w.r.t мой S5, это будет 48dp * 2.7.

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

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