设备无关像素的基础知识

7

我对Android上的dp感到非常困惑。

从参考资料中我了解到,dp值的基础是160。

因此,80dp宽度不应该等于宽度为屏幕50%的视图吗?但在我的Nexus One上,宽度似乎约为300dp。

我错过了什么?

提前感谢。

4个回答

16

"dp"代表“密度无关像素”(这也是为什么之前被称为“dip”,尽管我现在更喜欢使用“dp”)。

将其视为其他单位--“in”(英寸),“mm”(毫米)等。 它允许您提供一个基于屏幕密度缩放的大小。

我们定义mdpi为基础密度,因此在mdpi屏幕上的“10dp”将导致确切的10像素。 在hdpi屏幕上,它将导致15个像素,因为hdpi是1.5 * mdpi。

请注意,尽管各种密度的常数类似于DPI(mdpi为160等),但密度不完全等同于DPI。它是一个抽象的缩放因子,用于调整屏幕dpi,但并不试图完全反映它。(您可以使用“in”,“mm”等来获得精确大小,但99.9%的情况下,这不是您想要的,因此请坚持使用“dp”)。这极大地简化了每个人的生活,因为您不需要处理许多Android设备具有略有不同的UI空间量,因为它们各自具有略有不同的屏幕DPI。此外,设备制造商可以选择其设备的密度以实现所需的UI--例如,Samsung Tab使用比实际DPI大得多的密度,从而导致整体较大的UI。


4
“这极大地简化了每个人的生活” - 但实际上并没有。这使得每个人的生活更加困难 - 因为 dips 不起作用(它们在现在许多硬件上非常不同,因此无用)。Google 仍然建议将所有 UI 设计使用 dips,但这是不可能的,因为它会导致 30% 的手机对不齐(我来这里寻求解决方案,但很失望没有找到任何解决方法)。 - Adam

5

每英寸160个点。因此,80dp大约是1/2英寸。


OP 问的是 dip,不是 dpi。 - Ying
它们是相关的。他提到160是基准值-该值是DPI中的密度。 - Kevin Coppock

2

0

密度无关像素(简称:dp)是一种虚拟像素单位,将在应用程序运行时确定。

公式: 1 dp = 160 dpi 屏幕上的 1 像素。 因此,160 dpi 是系统的基准密度。

将 dp 单位转换为屏幕像素非常简单。 实际设备像素(px)= dp(1)*(设备的 dpi / 160(基线)) 为了简单起见:px = dp *(dpi / 160)

例如: 如果一个 240 dpi 的设备启动您的应用程序,则 1 dp 等于 1.5 个实际设备像素。

结论: DP 自动处理任何缩放到更大或更小的设备。硬编码像素的时代已经过去了。DP 可确保在不同屏幕密度下适当缩放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接