2012-07-22 81 views
31

我正在做一个日历,我需要一个网格。问题是边界,或者说每个网格之间的空间,我正在使用它来模拟一个网格,是1DP。但它相当厚实。我正在查看其他具有边框的日历应用程序,并且它们非常薄。即使我使用drawable形状并将其设为1dp,它仍然具有这种厚度。我尝试使用.5,但似乎没有工作。这不可能吗?Android可以支持dp小于1dp吗?

回答

51

的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确实相同。

+0

px是一个好主意 - 允许每个设备尽可能地做到这一点。谢谢! – 2015-09-18 20:00:04

7

是的。

我设置为0.1dp,这是对我的4" ME860 DRIOD比1DP小。

+0

它似乎取决于设备。我看到0.5dp的边框,它显示在我的Nexus 4上,但不是第一代Kindle。 – Sam 2014-02-25 22:18:51

相关问题