Android可以支持DP小于1DP吗?

y1aodyip  于 2023-04-04  发布在  Android
关注(0)|答案(4)|浏览(181)

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

x8diyxa7

x8diyxa71#

Android确实允许您将dp的分数值输入到XML中,但我不确定是否会推荐它,因为结果变得不那么容易预测/计算。设备使用(基本上)以下公式将dp值转换为像素:

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

(i.e.设备密度标度四舍五入到最接近的整像素值)
scale值将基于设备的屏幕密度:

  • MDPI = 1
  • HDPI = 1.5
  • XHDPI = 2
  • XXHDPI = 3

因此,对于上述密度,0.5dp将导致{1 px,1 px,1 px,2 px},而1dp将是{1 px,2 px,2 px,3 px}。1 px},因为在上述公式中,任何小于1的值都将解析为单个像素,除非该值显式为0dp(不可能绘制比单个像素宽度更薄的内容)。
如果你想确保使用尽可能薄的宽度,最好用px来显式定义宽度,而不是像dp这样的缩放单位。设置1px的值将在所有设备上使用单个像素绘制,并且比希望0.5dp0.1dp做同样的事情更具可读性。

hmae6n7t

hmae6n7t2#

是的。
我设置为0. 1dp,它比我的4“ME860 DRIOD上的1dp小。

zy1mlcev

zy1mlcev3#

答案很简单,是的,你可以。
简单地解决您的问题(即实现尽可能薄的线)将thinckness设置为:1像素
我建议像素,因为它不依赖于设备,它是最小的措施,此外,它不会被转换成另一种形式,因此没有舍入错误,也没有任何意外的渲染…让我解释一下。
Android布局xml文件,或尺寸xml值文件,将允许您输入dp的十进制值。
然而:我已经在许多设备上试验了从0. 1dp到1dp的几个值。根据设备的不同-它可能不会像你期望的那样渲染。
在像素密度较低的设备上,即使编码为具有相同的像素密度,线条也可能在一侧比另一侧更厚......这是由于截断转换为dp到px的值时引入的不准确性-(如Devunwired所述):

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

像素**(px)是最小的单位,必须是一个整数。所以-如果你的目标是简单地拥有最小的线条/边框,为什么不将其设置为:
1
像素**
我希望这有帮助!

xnifntxz

xnifntxz4#

把颜色调淡一点,这样看起来就不那么浓了。

相关问题