Почему стандартные единицы физической длины, такие как мм, не используются для макета сенсорного интерфейса?
Если вы разрабатываете интерактивный сенсорный элемент пользовательского интерфейса, например кнопку, вам нужно что-то с разумным физическим размером, чтобы пользователь мог удобно его нажимать. Таким образом, раскладка сенсорного интерфейса аналогична раскладке физических кнопок и ручек на электронном устройстве. И для этого вида физической инженерии миллиметры (или дюймы) являются предпочтительной единицей.
По какой-то причине это не относится к дизайну сенсорного интерфейса. Я не считаю себя очень хорошо прочитанным в этой теме, но, честно говоря, я никогда не видел, чтобы кто-нибудь использовал mm как единицу в, скажем, файле макета Android. Но я видел бесконечные дебаты о "px" против "dp" против "sp" против тех, кто знает что.
"Аппаратно-независимый пиксель" (который в Android определяется с точки зрения физической длины - 1 дп ≈ 0,16 мм) кажется действительно запутанным способом определения длины.
Почему бы просто не использовать миллиметры?
Это проблема с устройствами, которые не поддерживают эти устройства должным образом? Является ли это культурным явлением (программисты могли бы больше привыкать думать в "некоторых пикселях", а не в физических единицах)? В чем дело?
4 ответа
Как правило, мобильные юзабилити говорят о миллиметрах. Но программисты и визуальные дизайнеры говорят о пикселях или точках, не зависящих от плотности (1 Android "DIP" = 1 iOS "точка"), потому что даже если бы вы могли указать измерение точно в миллиметрах, у вас бы возникли проблемы с округлением или полупикселем сглаживание уродства:
1 мм равен 6,3 DIP (степень точности зависит от точного значения DPI экрана, поскольку значение угла наклона квантовано с точностью до 120/160/240/320/480/640 dpi). Это означает, что на стандартном экране 160DIP в стиле G1, если вы укажете кнопку размером, скажем, 8 мм, на этом экране будет 50,4 пикселя - удачи вам в рендеринге с любой степенью точности или указание Photoshop завершить линию ровно 50,4 пикс. И просто округление не является большим решением; экран по-прежнему имеет фиксированную общую ширину в пикселях, и эти ошибки округления могут привести к нарушению симметрии, если вы (скажем) выкладываете сетку кнопок с определенными размерами и величинами заполнения.
Указав, что (скажем, 48DIP) гораздо лучше, поскольку он плавно масштабируется: 48px при 160DPI, 72px при HDPI (240) и 96px при 320DPI (AKA 2x в терминологии iOS), не требуется дробного рендеринга или округления пикселей.
Относительно того, почему именно пиксель 160DPI победил как 1x мобильная единица измерения для независимого от плотности пикселя, обвиняют первые несколько iPhone и HTC G1, которые разделили эту конфигурацию.
Я думаю, что W3C дает достойное объяснение различных единиц измерения для экранов, и где у каждого есть свои преимущества и недостатки. Я также очень рекомендую видео" Density Independent Pixels" Романа Нурика. Хотя он не дает прямого ответа на ваш вопрос, он предоставляет много полезной информации.
Вот мои аргументы в пользу DP вместо mm:
Ресурсы
Это, наверное, самый большой. Когда дизайнеры и разработчики создают изображения или видео, мы не используем физические размеры. Если вы делаете снимок с помощью камеры, вы не можете сказать, что картинка имеет 5 дюймов в высоту. Насколько высока картинка, зависит от того, как вы решили распечатать ее.
Таким образом, если я хочу показать изображение своим пользователям или создать графическое изображение кнопки, я не могу просто создать ресурс шириной 10 мм и высотой 10 мм. Это одно изображение будет отображаться в разных размерах на разных экранах. Даже если устройство / код масштабирует изображение точно до 10 мм в высоту, оно будет выглядеть невероятно пиксельным на большинстве телевизоров и / или будет иметь больше деталей, чем устройство с низкой плотностью (например, часы), сможет отображать (тратить впустую) ресурсы устройства).
Ответ заключается в том, чтобы экспортировать одно изображение разных размеров, чтобы оно хорошо выглядело на нескольких устройствах.
Конечно, есть и другие способы обойти это. Векторная графика может решить эту проблему, но это совсем другая тема.
DP
Что касается специфичного для Android ответа - мы вроде как. Как вы указали, мы используем DP, который можно приблизительно преобразовать в обычные физические единицы длины, такие как мм.
Тем не менее, использование DP работает в тандеме с сегментами плотности Android, что позволяет дизайнерам создавать ресурсы для конечного набора размеров дисплея. По моему мнению, маркировка этих сегментов физическим измерением была бы немного более запутанной, поскольку 4,2-дюймовый телефон мог бы быть в 4-дюймовом сегменте.
SP
SP используются в основном для текста, чтобы пользователь мог настроить размер шрифта. Определение размера шрифта в пикселях или мм будет вводить в заблуждение, как только пользователь изменит свое масштабирование.
Использование sp/dp сделает ваши Android-приложения совместимыми с несколькими плотностями экрана и разрешениями
Что невозможно с мм, где макет вашего приложения не зависит от разрешения.
Это потому, что Android поддерживает множество размеров и разрешений устройств. Вы хотите разработать приложение, которое принимает прикосновения в определенных местах, измеряемых в мм, и отличается ли это местоположение на телефоне от планшета? Или планшет высокой плотности того же размера, что и планшет низкой плотности? Или даже просто разница в высоте / ширине между телефонами и планшетами.
Миллиметры - это жесткое измерение, которое отражает реальное расстояние, но не количество пикселей. Единицы измерения, такие как "dp" и "sp", учитывают как пиксели, так и размер