Отношения между dip, px и dpi - PullRequest
       20

Отношения между dip, px и dpi

7 голосов
/ 23 декабря 2010

Если в макете XML-файла я установил размер, например, 12dip.Будет ли это всегда 12px в мдпи и 18px в hdpi?

Значит ли dip всегда верно для mdpi и будет соответственно масштабироваться для других плотностей?

Ответы [ 2 ]

12 голосов
/ 23 декабря 2010

Этот вопрос полностью охватывается официальной документацией . Отношения между dip, px и dpi охватываются этой секцией.

Цитата:

Плотно-независимый пиксель (dp)

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

Плотно-независимый пиксель эквивалентен одному физическому пикселю на Экран 160 dpi, базовая плотность предполагается платформой (как описано позже в этом документе). Во время выполнения, платформа прозрачно обрабатывает любые масштабирование необходимых единиц дп, на основе на фактическую плотность экрана в использовать. Преобразование дп единиц в пиксели экрана просты: пиксели = dps * (плотность / 160). Например, на экране с разрешением 240 dpi 1 dp будет равно 1,5 физические пиксели. Использование дп единиц для определить интерфейс вашего приложения очень рекомендуется, как способ обеспечения правильное отображение вашего интерфейса на разных экраны.

Итак, утверждение:

, который всегда будет 12px в hdpi и 18px в hdpi

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

5 голосов
/ 16 мая 2014

12dp будет 12px на устройстве с плотностью 160 точек на дюйм.В документах не говорится, что все устройства mdpi имеют точно 160 точек на дюйм, поэтому кажется, что вы можете найти mdpi устройства с другой плотностью (например, 150 или 180 точек на дюйм).В этих случаях отношение 1dp = 1px не будет истинным.

Вы можете быть уверены только в этом отношении:

px = dp * (dpi / 160)

Если устройство имеет плотность 320 точек на дюйм, то каждый дпсоответствует 2 px, потому что 320/160 равно 2. Я бы сказал, что 2 - это «коэффициент плотности», но это также то, что вы получаете с getResources().getDisplayMetrics().density, поэтому его также называют «плотностью».

...