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

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

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

2 ответа

Решение

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

Цитата:

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

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

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

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

это всегда 12px в MDI и так 18px в HDP

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

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

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

px = dp * (dpi / 160)

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

Другие вопросы по тегам