В настоящее время я работаю над каркасами для мобильного приложения, и есть что-то, что, кажется, ускользает от меня. В Руководстве по дизайну Android они заявляют следующее:
В среднем 48dp переводят на физический размер около 9 мм (с некоторыми изменчивость).
Но, согласно Android Developers Dev Guide, они вычисляют dp
по следующей формуле:
Не зависящий от плотности пиксель эквивалентен одному физическому пикселю на 160 т/д, что является базой плотности, принятой системой для экрана средней плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование блоков dp, если необходимо, на основе фактического плотность используемого экрана. Преобразование блоков dp в экран пикселы просты: px = dp * (dpi/160). Например, на 240 dpi screen, 1 dp равно 1,5 физическим пикселям. Вы всегда должны использовать dp при определении пользовательского интерфейса приложения, чтобы обеспечить правильное отображение ваш пользовательский интерфейс на экранах с различной плотностью.
Итак, скажем, что для простоты я делаю свой проект на 160 dpi, поэтому мои графики имеют нужный размер в соответствии с рекомендованными стандартами. При печати я уменьшаю свой документ на 2,22 (160dpi/72dpi), поэтому напечатанный результат дает фактический физический размер на бумаге.
Я хочу, чтобы мои кнопки были на 48dp выше. Но если я занимаюсь математикой, следуя всем, что я читаю, я нигде не близок к размеру 9 мм, указав 48 в качестве высоты своей кнопки.
48dp/160dpi = 0,3 дюйма, поэтому 7,62 мм...
Чего я явно не вижу/делаю неправильно? Откуда это 9мм?
Спасибо!
Обновление
Вот что помогло мне понять, чего я не понял из принятого ответа.
Возьмем в качестве примера плотность экрана 200. Android будет использовать 240 для расчета. Итак:
- 240dpi/160dpi = 1,5 шкалы
- 48dp * 1,5 of scale = 78 физических пикселей
- 78 px/240dpi = 0,3 дюйма (что точно так же, как 48dp/160dpi)
Теперь фокус в том, что фактическая плотность устройства была 200. Таким образом, пиксели будут отображаться больше, чем на экране 240 точек на дюйм. Чтобы получить физический размер устройства 200dpi, мы должны получить разницу между обоими разрешениями и применить его к 0,3 дюйма:
- 240dpi/200dpi = 1,2
- 0,3 в * 1,2 разницы = 0,36 дюйма, что дает 9144 мм
Я знаю, что это точно так же, как указано @kabuko:
(48dp/200ppi) * 1,5 * 25,4 мм/дюйм = 9,144400
но шаг за шагом помог мне разобраться, что происходит под капотом.