为什么要使用dp?

时间:2018-06-24 14:52:42

标签: android

  1. 当已经有其他密度无关单位(例如cm)时,为什么要创建dp?
  2. Android系统是否根据存储分区而不是确切的设备像素密度将dp转换为px?这样会不会导致在不同设备屏幕上测量多少物理空间元素不一致?

2 个答案:

答案 0 :(得分:1)

  1. 因为cm太大。您必须使用浮点数,这意味着您需要一直舍入。他们想要更小的东西。此外,首批设备的分辨率为160 dpi,当时的速度为1dp = 1px(这在当时很方便)(现在很少有设备以mdpi出货,因此这种优势消失了)。也恰好与iPhone的dpi相匹配,四舍五入到最接近的10(iPhone为163 dpi),因此测量是移动开发人员用来进行轻松转换的工具。

  2. 它基于物理尺寸。可能会有一些差异,但实际上没有。如果图像太小,则拉伸很小的图像所产生的失真量可以忽略不计。 dp的另一个主要用途是在填充中,只要您在单个设备上保持一致,轻微的舍入错误就不会引起注意。

答案 1 :(得分:0)

  1. 正如@Gabe Sechan所说,厘米太大(甚至是毫米)。与cm相反,像素转换基于密度类别,而不是屏幕的确切密度,从而避免了cm到px的舍入问题(1.5x,2x,3x等因数比“任意”舍入更好) “ ppi)。
  2. 是的。 dp到px的转换基于屏幕所属的密度桶(mdpi,hdpi,xhdpi等),而不是确切的物理ppi。应用程序的位图图形按存储桶分类,因此,为了实现测量一致性,dp是根据密度存储桶而不是实际ppi进行转换的。缺点是,与厘米等单位不同,不能保证每个屏幕上的测量尺寸都相同(example of such inconsistency)

参考文献:

Why aren't standard physical length units like mm used for touch UI layout?

Why “dp-to-pixel” ratio changes with the screen density, but not necessarily in direct proportion