Я вижу, что это, вероятно, вопрос нуб, но это действительно смущает меня.
Я читаю документы из Google Material Design, а также некоторые из его реализаций в css. Спецификация написана на Android dp
, в то время как коды CSS используются px
в качестве единицы длины.
Меня смущает то, что реализации css часто используют точное значение из спецификации, например, тост должен иметь :
Высота одной закусочной: 48 дп
Минимальная ширина: 288 дп
2 dp закругленный угол
min-height: 48px;
min-width: 288px;
...
border-radius: 2px;
В моем текущем понимании Android DP
обычно отображается с размером одного пикселя на экране с разрешением 160 точек на дюйм, в то время как CSS px
определяется как угол обзора. Так px
бывает ли так же, как dp
при просмотре на некотором расстоянии? Если это так, это обычный шаблон для использования, px
как dp
в CSS, или я полностью неправильно понял код CSS?
Я ничего не знаю о разработке Android раньше, и не дизайнер. Спасибо за любую помощь.
em/rem
s везде, а затем просто масштабировать базовый размер шрифта для каждого разрешения.Ответы:
Я думаю, что принятое неправильно. Css px на самом деле является независимым от устройства пикселем (dip), и это обычный шаблон для использования px в качестве dp в css.
источник
Я считаю, что полный ответ на ваш вопрос можно найти здесь:
/programming/2025282/difference-between-px-dp-dip-and-sp-in-android
Чтобы преобразовать dp в px, вам необходимо учитывать размеры экрана, к которым вы обращаетесь. Чем больше DPI, тем больше пикселей вам нужно втиснуть в одну и ту же область, чтобы она выглядела хорошо и чтобы избежать пикселизации :
ldpi: 1 dp = 0,75 px
mdpi: 1 dp = 1 px
hdpi: 1 dp = 1.5 px
xhdpi: 1 dp = 2 px
xxhdpi: 1 dp = 3 px
xxxhdpi: 1 dp = 4 px
Например:
Квадрат 3x3 dp в CSS или Photoshop должен быть:
2.25x2.25 px - ldpi
3x3 px - mdpi (Samsung ACE, Xperia X8)
6x6 px - xhdpi (Xperia S, Google Nexus 4)
9x9 px - xxhdpi (Samsung S4 - S5, HTC One)
12x12 px - xxxhdpi (это разрешение) будет использоваться на устройствах следующего поколения)
Исходя из вышесказанного, ваши калькулатины должны выглядеть следующим образом, используя множитель 3х dp для экранов XXHDPI:
Android автоматически уменьшает изображения, если обнаруживает, что разрешение используемого устройства ниже, поэтому вы можете безопасно разрабатывать с учетом XXHDPI, поскольку оно предназначено для большинства современных высокопроизводительных устройств на рынке.
Вот простой конвертер, который сделает всю работу за вас: http://androidpixels.net/
источник
W3C говорит :
И хотя это говорит:
Это также говорит:
Учитывая, что по умолчанию экранные устройства настроены на 96 dpi, это лучшее предположение о том, как браузеры интерпретируют пиксель CSS:
И мы знаем, что в Android:
Так:
И в соответствии с этим:
Ну, я думал, что это правильно, пока я не проверил размеры тостов Google Polymer :
Так что это конвертация 1 к 1, и из этого мы получили, что браузеры Android используют:
И 96 css-px на дюйм используется на других устройствах, таких как настольные компьютеры и ноутбуки.
В заключение: пиксели css не зависят от dpi устройства, а на устройствах Android 1 css-px равен 1dp.
источник
Правильного ответа не существует, на самом деле их два:
Примечание: общая идея: в нижней части страницы: масштабирование изображения с некоторым изображением для визуализации соотношений для нескольких порогов разрешения экрана (изображение точки останова)
Вот более подробная информация для тех, кто хочет углубиться в тему, но это объяснение и логика позади, выше полный ответ :
Дело в том, что «плотность пикселей», согласно официальному руководству Material Design (Layout> Единицы и измерения), это:
Таким образом, в основном плотность пикселей - это новое имя для значения ppi или поскольку многие люди не распознают это как отдельную вещь, значение dpi.
Определение 1dp согласно тому же руководству:
Основным принципом дизайна материалов является поддержание согласованных физических размеров на разных платформах, что поднимает проблему разрешения рабочего стола, ppi (/ dpi) и пикселя css. В этом случае вам следует придерживаться расчета dp, как в случае с Android устройств, и это не правда, что большинство экранов 96ppi (это предположение, что важно для CSS), большая часть из них имеет немного более высокий ppi, и если принять во внимание не только традиционный настольный компьютер, но и обычные ноутбуки или планшеты, или «кабриолеты», такие как Surface, существует необходимость в конвертации: они обычно находятся в диапазоне 100-130ppi, где указано, что я использую в данный момент 127ppi:
100% = 160ppi -> физическая ширина в 1 пиксель = 1dp -> прямоугольник 100x100px = 100x100dp
79% = 127ppi -> физическая ширина 1 пиксель = ок. 0,8dp -> прямоугольник 100x100px = 80x80dp
Хотя dp - это чистый и новый модуль только для Android, вы должны сделать некоторые расчеты, чтобы адаптировать макеты MD, которые все входят в dp. Если вы хотите получить еще какое-то представление о том, насколько большим будет конкретный элемент в физическом смысле, то наиболее полезным для цели вопроса является значение « Идеальный диапазон размеров прикосновения» в Руководстве по проектированию материалов для конкретных устройств ** Ниже значения dp физический. ** Значение dp изменяется, но физическое остается неизменным.
Проблема, для которой вам нужно вычислять единицы измерения, более подробно объясняется в руководстве по API Android (Преобразование единиц измерения dp в пиксельные единицы), и она все еще применяется для элементов, стилизованных с помощью CSS:
Ранее упомянутое преобразование полимера 1: 1, вероятно, связано с тем, что плотность 96 точек на дюйм, или даже та, которую я дал, находится где-то в группе низкой плотности или даже (как в случае 96 точек на дюйм), даже ниже ее. Принимая во внимание, что значение dp не является принятым css, проще предположить, что коэффициент плотности (0,75 - для низкого, 1,0 - средний и т. Д.) - тот, который следует использовать для упрощения и множественного размера. поддержка экранов, которая показана в таблице устройств для Material Design, упомянутой ранее. Это даже упоминается как одна из лучших практик в приведенной выше главе руководства по API Android. И вот где конверсия полимера 1: 1 может быть хорошей, так как многие устройства имеют коэффициент плотности на уровне 1.
Возвращаясь к последней дилемме: css px, если вы решите погрузиться в тонкие нюансы разных устройств. Если вы не очень интересуетесь, просто придерживайтесь коэффициента плотности из таблицы MD. Но если вы перфекционист, то суть отношения пикселей и физических размеров CSS имеет идеальное (и довольно простое объяснение) в рекомендации кандидата W3C:
Это новое определение px (с учетом физических размеров) заполняет пробел между пикселями CSS и dps и позволяет нам убедиться, что с помощью простых вычислений измерений так называемая среда вывода, которая в этом случае является последовательной (в физическом смысле) ) Макет MD , остается неизменным на разных устройствах и платформах. Более того, в руководствах W3C и MD используются изображения устройств с низким и высоким разрешением, чтобы проиллюстрировать основную идею покрытия пикселями / точками - требуется больше пикселей (точек) устройства, чтобы покрыть область размером 1 на 1 пиксель на устройстве с высоким разрешением, чем на низком разрешении, что означает, что широко используемые в CSS-запросах для отображения сетчатки - это действительно то же самое, что вы должны предоставить (но с большим количеством пороговых значений) для Material Design и всех мобильных устройств.
В заключение, либо используйте коэффициент плотности MD, который лучше всего рекомендует Google , либо, если вы зациклены на точности, или ваш дизайн должен быть абсолютно согласованным с физическими размерами: используйте точное преобразование с использованием значений ppi / dpi конкретных или общих устройства (что довольно безумно), что вы можете легко протестировать с помощью онлайн-инструмента Google Resizer, поскольку они учитывают общие пороговые значения, предложенные в Руководстве по MD, в первую очередь, и правила деления для соотношения и соответствующих имен отображаемых типов (xlarge, medium и т. д.). ) реализовано в нем.
Поэтому придерживайтесь коэффициентов MD из таблицы, помня, что эталонный размер пикселя dp равен разрешению mdpi (160), и вы будете в порядке.
источник