Я делаю календарь, и мне нужна сетка. Проблема заключается в том, что границы, или, скорее, пространство между каждой сеткой, которое я использую для моделирования симуляции сетки, составляет 1 дп. Но его довольно толстая. Я смотрю другие приложения календаря, у которых есть границы, и они очень тонкие. Даже если бы я использовал форму drawable
и сделал ее 1dp, она все еще имеет такую толщину. Я попытался использовать .5, но это, похоже, не сработало. Разве это невозможно?
Может ли Android поддерживать dp менее 1dp?
Ответ 1
Android позволяет вводить дробные значения для dp
в XML, хотя я не уверен, что рекомендую его, потому что результаты становятся менее простыми для прогнозирования/вычисления. Устройства преобразуют значения dp
в пиксели, используя (в основном) следующую формулу:
px = (int)(scale * dp + 0.5)
(т.е. масштаб плотности устройства округлен до значения ближайшего целого пикселя)
Значение scale
будет основано на плотности экрана устройства:
- MDPI = 1
- HDPI = 1.5
- XHDPI = 2
- XXHDPI = 3
Итак, 0.5dp
приведет к {1px, 1px, 1px, 2px} для вышеуказанных плотностей, тогда как 1dp
будет {1px, 2px, 2px, 3px}. Крошечное значение, подобное 0.1dp
, разрешило бы {1px, 1px, 1px, 1px}, потому что все, что меньше 1 в приведенной выше формуле, разрешается одному пикселю, если значение не было явно 0dp
(невозможно нарисовать что-то более тонкое, чем ширина одного пикселя).
Если вы хотите убедиться, что используется самая тонкая ширина, лучше всего явно определить ширину с помощью px
вместо масштабированного устройства, например dp
. Установка значения 1px
будет рисоваться с одним пикселем на всех устройствах и гораздо читаема, чем надеется 0.5dp
или 0.1dp
делает то же самое.
Ответ 2
Да.
Я установил 0.1dp и меньше 1dp на моем 4 "ME860 DRIOD.