Android支持dp不到1dp吗?

时间:2012-07-22 05:18:10

标签: android

我正在制作日历,我需要一个网格。问题是边界,或者更确切地说是每个网格之间的空间,这是我用来模拟网格的,是1 dp。但它相当厚实。我正在寻找具有边框的其他日历应用程序,它们非常薄。即使我使用drawable形状并使其成为1dp,它仍然具有该厚度。我尝试使用.5,但这似乎不起作用。这不可能吗?

2 个答案:

答案 0 :(得分:61)

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.5dp0.1dp执行相同操作更具可读性。

答案 1 :(得分:3)

简单的答案是肯定的,你可以。

Simpe解决您的问题(即实现最薄的线)将thinckness设置为: 1 px

我建议px不依赖于设备,它是可用的最小度量,而且它不会被转换为另一种形式,因此没有舍入错误也没有任何意外的渲染......让我解释一下。

Android布局xml文件或维度xml值文件,允许您输入dp的十进制值。

但是: 在许多设备上,我已经尝试了0.1dp到1dp的几个值。取决于设备 - 它可能无法按预期呈现。

在较低像素密度的器件上,即使它们被编码为具有相同的一侧,线也可能在一侧变得比另一侧更厚......这是由于在将转换为dp到px值时截断时引入的不准确 - (正如Devunwired提到的那样):

px = (int)(scale * dp + 0.5)

像素(px)是最小单位,必须是整数。所以 - 如果您的目标是简单地使用尽可能小的线/边界,为什么不将其设置为:

1 px

我希望这有帮助!