Минимальная высота кнопки Android:48dp = 9 мм?

Сейчас я работаю над вайрфреймами для мобильного приложения, и кое-что, кажется, ускользает из моей памяти:В Руководстве по дизайну Android говорится следующее:

В среднем 48dp физический размер около 9 мм (с некоторыми изменчивость).

Но, согласно Руководству для разработчиков Android , они рассчитывают dpпо следующей формуле:

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

Допустим, для простоты я делаю свой дизайн с разрешением 160 точек на дюйм, поэтому моя графика имеет правильный размер в соответствии с рекомендуемыми стандартами. При печати я уменьшаю свой документ на 2,22 (160 dpi/72 dpi ), поэтому результат печати дает фактический физический размер на бумаге.

Я хочу, чтобы мои кнопки были высотой 48 dp. Но если я посчитаю, следуя всему, что я прочитал, я и близко не приблизился к размеру 9 мм, указав 48 в качестве высоты моей кнопки.

48 dp / 160 dpi = 0,3 дюйма, значит, 7,62 мм...

Что я явно упускаю/делаю неправильно? Откуда эти 9 мм?

Спасибо!

Обновление

Вот что помогло мне понять, чего мне не хватало в принятом ответе.

Возьмем в качестве примера плотность экрана 200. Android будет использовать 240 для своих расчетов. Итак,:

  • 240 dpi / 160 dpi = 1,5 масштаба
  • 48 dp *1,5 масштаба = 78 физических пикселей
  • 78 пикселей / 240 dpi = 0,3 дюйма (, что точно такое же, как 48dp / 160dpi)

Хитрость в том, что реальная плотность устройства была 200. Таким образом, пиксели будут казаться больше, чем на экране с разрешением 240dpi. Чтобы получить физический размер на устройстве с разрешением 200 точек на дюйм, мы должны получить разницу между обоими разрешениями и применить ее к 0,3 дюйма:

  • 240 точек на дюйм / 200 точек на дюйм = 1,2
  • 0,3 дюйма *1, 2 разницы = 0,36 дюйма, что дает 9,144 мм

. Я знаю, что это точно так же, как указано @kabuko:

(48dp / 200ppi)*1,5 *25,4 мм/дюйм = 9,14400

, но пошаговый способ помог мне разобраться что происходит под капотом.

17
задан David Côté 12 April 2012 в 20:49
поделиться