Ответ 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
делает то же самое.