Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android能否支持dp';小于1dp?_Android - Fatal编程技术网

Android能否支持dp';小于1dp?

Android能否支持dp';小于1dp?,android,Android,我正在做日历,我需要一个网格。问题是边界,或者更确切地说是每个网格之间的空间,我用它来模拟网格,是1dp。但是它相当厚。我正在研究其他有边框的日历应用程序,它们非常薄。即使我使用了一个可绘制的形状并使其为1dp,它仍然具有该厚度。我试过使用.5,但似乎不起作用。那不可能吗?是的 我将其设置为0.1dp,在我的4“ME860 DRIOD上小于1dp。Android确实允许您将dp的分数值输入XML,但我不确定我会推荐它,因为结果变得不太容易预测/计算。设备使用(基本上)以下公式将dp值转换为像素:

我正在做日历,我需要一个网格。问题是边界,或者更确切地说是每个网格之间的空间,我用它来模拟网格,是1dp。但是它相当厚。我正在研究其他有边框的日历应用程序,它们非常薄。即使我使用了一个
可绘制的
形状并使其为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)