我有点担心我所读到的这里,它意味着没有基于dp
和屏幕密度计算px
的可靠公式(反之亦然):
dp :密度无关像素--一个基于屏幕物理密度的抽象单元.这些单位是相对于160 dpi (点每英寸)屏幕,其中1dp大约等于1 1px。当在较高密度的屏幕上运行时,用于绘制1dp的像素数将按照适合屏幕dpi的因子进行缩放。同样,在低密度屏幕上,用于1dp的像素数也会缩小。 dp与像素的比率会随屏幕密度而变化,但不一定是成正比的。使用dp单元(而不是px单元)的是一个简单的解决方案,可以根据不同的屏幕密度适当调整布局中的视图尺寸。换句话说,它为您的UI元素在不同设备上的真实大小提供了一致性。
我认为我们可以始终使用以下公式(解释为这里):px = dp * (dpi / 160)
然而,这个问题中的证词似乎突出了这样一种情况,即在dp
中指定大小并不能保证设备之间的固定大小。
用粗体表示的句子的真正含义是什么?,我们需要使用mm
来确保保持相同的感知大小吗?
发布于 2014-03-28 05:45:05
我认为我们总是可以使用以下公式(在这里解释):px = dp * (dpi / 160)
这个公式总是可以用于像素和dp之间的转换。只需确保使用DisplayMetrics.densityDpi作为公式中dpi的值。
然而,这个问题中的证词似乎突出了这样一种情况,即在dp中指定大小并不能保证设备之间的固定大小。
是的,确实,某个dp不能保证一个固定的跨设备感知到的大小。然而,它确实保证了一个类似的跨设备感知的大小。原因是在某些设备上,densityDpi (密度桶)与设备的物理dpi不同。有关更多细节,请参见我的回答向您链接的问题。
dp与像素的比值将随屏幕密度的变化而变化,但不一定成正比。
在这里,我认为他们指的是实际的屏幕密度,当他们说“屏幕密度”时,而不是手机属于哪个密度桶。
例如,物理dpi为270的设备属于“高”(240)密度桶,dp与像素的比值为240/160 = 1.5。
另一个物理dpi为290的设备属于"xhigh“(320)密度桶,dp与像素的比值为320/160 =2。
当您比较这些设备时,物理屏幕密度增加了7% (270个-> 290),而dp/像素比增加了33% (1.5 -> 2),所以它们之间不是一个直接的比例。
我们是否需要使用mm以确保保持相同的感知大小??
如果重要的是,在不同的设备之间,所接受的尺寸是尽可能相似的,那么您必须使用mm或英寸。但是,正如我在您所链接的问题中提到的那样,这有一些缺点。
同样重要的是要记住,有些设备的mm和英寸单元被破坏,有关这方面的更多信息,请参见问题为什么Lint在使用英寸或毫米(毫米)单位作为尺寸时显示警告?。
https://stackoverflow.com/questions/9907842
复制