Android能否支持dp';小于1dp?
我正在做日历,我需要一个网格。问题是边界,或者更确切地说是每个网格之间的空间,我用它来模拟网格,是1dp。但是它相当厚。我正在研究其他有边框的日历应用程序,它们非常薄。即使我使用了一个Android能否支持dp';小于1dp?,android,Android,我正在做日历,我需要一个网格。问题是边界,或者更确切地说是每个网格之间的空间,我用它来模拟网格,是1dp。但是它相当厚。我正在研究其他有边框的日历应用程序,它们非常薄。即使我使用了一个可绘制的形状并使其为1dp,它仍然具有该厚度。我试过使用.5,但似乎不起作用。那不可能吗?是的 我将其设置为0.1dp,在我的4“ME860 DRIOD上小于1dp。Android确实允许您将dp的分数值输入XML,但我不确定我会推荐它,因为结果变得不太容易预测/计算。设备使用(基本上)以下公式将dp值转换为像素:
可绘制的
形状并使其为1dp,它仍然具有该厚度。我试过使用.5,但似乎不起作用。那不可能吗?是的
我将其设置为0.1dp,在我的4“ME860 DRIOD上小于1dp。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
的sa更具可读性我。简单的答案是可以,你可以
简单解决您的问题(即获得尽可能薄的线条)将厚度设置为:
1px
我建议px不依赖于设备,它是可用的最小度量,而且它不会转换为另一种形式,因此没有舍入错误或任何意外的渲染…让我解释一下
Android布局xml文件或维度xml值文件将允许您为dp输入十进制值
然而:
我已经在许多设备上使用了从0.1dp到1dp的几个值进行了实验。根据设备的不同,它可能不会像您预期的那样渲染
在像素密度较低的设备上,线的一侧可能比另一侧渲染得更厚,即使它们被编码为具有相同的…这是由于截断转换为dp到px的值时引入的不精确性所致(正如Devunwired提到的):
像素(px)是最小的单位,必须是整数。因此-如果您的目标只是拥有尽可能最小的线条/边框,为什么不将其设置为:
1px
我希望这有帮助!这似乎取决于设备。我看到0.5dp的边框,它显示在我的Nexus 4上,但在第一代Kindle上没有显示。px是一个好主意——允许每台设备都尽可能好。谢谢!
px = (int)(scale * dp + 0.5)