与设备无关的像素的基础知识

时间:2011-01-16 18:48:50

标签: android layout density-independent-pixel

我总是对Android上的逢低感到困惑。

我从参考文献中了解到,dp值的基数为160。 那么,80dp的宽度是否应该等于屏幕宽度为50%的视图? 在我的Nexus One上,dp的宽度似乎是300dp左右。

我在这里缺少什么?

事先提前

4 个答案:

答案 0 :(得分: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变大。

答案 1 :(得分:5)

每英寸160点 。所以80dp大约是1/2英寸。

答案 2 :(得分:2)

我完全不明白你的问题,但如果你还没有,我建议你看一下。

http://developer.android.com/guide/practices/screens_support.html

pixels = dps *(密度/ 160)

答案 3 :(得分:1)

密度无关像素(短:dp)是一个虚拟像素单元,将在应用程序的运行时确定。

Formala: 1 dp = 1 160 dpi屏幕上的像素。 因此160 dpi是系统的基线密度。

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

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

结论: Dp自动处理任何扩展到更大或更小的设备。您对像素进行硬编码的时间已结束。 DP可确保在不同的屏幕密度上正确缩放。