43

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

4

3 回答 3

64

Android 确实允许您在dpXML 中输入小数值,但我不确定我是否会推荐它,因为结果变得不太容易预测/计算。设备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执行相同操作更具可读性。

于 2014-02-13T05:45:49.787 回答
8

是的。

我设置为 0.1dp,在我的 4" ME860 DRIOD 上它小于 1dp。

于 2013-01-23T15:43:47.847 回答
3

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

简单解决您的问题(即实现最细的线)将thickness 设置为:1 px

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

Android 布局 xml 文件或尺寸 xml 值文件将允许您输入 dp 的十进制值。

但是:我已经在许多设备上尝试了从 0.1dp 到 1dp 的几个值。取决于设备 - 它可能不会像您期望的那样呈现。

在较低像素密度的设备上,与另一侧相比,线条可能会在一侧渲染得更粗,即使它们被编码为具有相同的......这是由于在截断转换为 dp 到 px 值时引入的不准确性 - (正如 Devunwired 提到的):

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

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

1像素

我希望这有帮助!

于 2018-04-09T16:51:16.563 回答