我正在阅读关于 dp、dip、px、sp 的度量单位,但是我仍有一些关于 dp/dpi 与 ppi 与 px 与 inch 的问题。我无法比较它们...那么一英寸是最大的吗?
他们说 160 dpi 意味着每英寸有 160 像素。这是否意味着 1 英寸包含 160 像素?
他们还说在 160 dpi 屏幕上的 1 个像素 = 1 dp。这是否意味着 1 个像素和 1 个 dp 相等?
最后,为什么我们应该使用 dp 而不是 px?我知道这是理想情况,但为什么?
我正在阅读关于 dp、dip、px、sp 的度量单位,但是我仍有一些关于 dp/dpi 与 ppi 与 px 与 inch 的问题。我无法比较它们...那么一英寸是最大的吗?
他们说 160 dpi 意味着每英寸有 160 像素。这是否意味着 1 英寸包含 160 像素?
他们还说在 160 dpi 屏幕上的 1 个像素 = 1 dp。这是否意味着 1 个像素和 1 个 dp 相等?
最后,为什么我们应该使用 dp 而不是 px?我知道这是理想情况,但为什么?
dp
,即密度无关像素,因为一个设备上的 300px
并不一定与另一个设备上的 300px
相同。最大的实际影响是,你的布局在具有不同密度的设备上看起来会明显不同于你设计目标的设备。
dp
或 dip
意味着密度无关像素dpi
或 ppi
意味着每英寸点数(或像素)inch
是连接实际屏幕大小的物理测量单位px
意味着像素-一个像素根据密度填充任意数量的屏幕区域。160dpi
屏幕上,1dp == 1px == 1/160in
,但在 240dpi
屏幕上,1dp == 1.5px
。因此,不,1dp != 1px
。只有在 160dpi
屏幕上才存在 完全相等的一种情况,那就是 1dp == 1px
。物理测量单位如英寸应该永远不会成为你设计的一部分-除非你在制作标尺。dp
的简单公式是 px = dp * (dpi / 160)
。300*(240/160) = 450 像素
。 - Chris Cashwelldp是像英寸一样的物理测量单位。(没错,就是这样。继续往下看)
"dp对应于160dpi下像素的物理大小"(https://developer.android.com/training/multiscreen/screendensities.html#TaskUseD)
在160dpi下像素的物理大小正好是1/160英寸。因此一个dp的大小为1/160英寸。 160 dp = 1 英寸。
px是屏幕上一种略带任意性的计量单位。
有关dp在不同设备上转换为px的示例,请参见此处:
dp、dip、dpi、ppi、像素和英寸之间有什么关系?
针对Android开发:
dp = dip
dpi = ppi
inch x dpi = pixels
dp = 160 x inch
dp = 160*pixels/dpi
因此,在160dpi的手机上(mdpi):
2 inches = 320 dp
2 inches = 320 pixels
2 inches = 320 dp
2 inches = 360 pixels
将dp转换为像素的公式很有趣:
dp = 160*pixels/dpi
等同于:
dp = pixels/(dpi/160)
dpi/160
是一个有趣的因素。它是相对于 Android 的 mdpi 二进制文件的密度比率,以及您必须将图形按比例缩放到各种资源二进制文件的数量。您会在这个页面上看到这个因素被提到了几次,0.75 是 ldpi 的因子。
float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;
.75 on ldpi (120 dpi)
1.0 on mdpi (160 dpi; baseline)
1.5 on hdpi (240 dpi)
2.0 on xhdpi (320 dpi)
3.0 on xxhdpi (480 dpi)
4.0 on xxxhdpi (640 dpi)
例如,
我有一部三星S5手机,分辨率为432 dpi
(http://dpi.lv/#1920×1080@5.1″)。
因此,density = 432/160 = 手机dpi/基准值 = 2.7
假设我的顶栏高度为48dp
。这是相对于基准值(160dpi)
的参考值。
所以,相对于我的S5手机,它将是48dp * 2.7
。
然后如果我想查看实际高度:
它将是(48dp * 2.7) / 432 dpi = 0.3英寸
。
当我们提到显示器而非安卓系统时,DP实际上指的是点距(Dot Pitch),这个词最初起源于CRT显示器,它是指两个相邻像素之间的对角线距离(以毫米为单位)。在LCD显示器中,像素更大一些,假设像素彼此相邻并且没有间隙(通常有一个非常小的间隙,但为了简单起见,我们假设它为零),则每个像素的中心之间的对角线距离等于像素的对角线长度。 DP值越低,图像越清晰。
DP = 25.4÷ppi 0.25 DP是标准值,边缘呈锯齿状 0.20 DP被认为更清晰 160 ppi = 0.158 DP
因此,DiP实际上是1000 x DP的四舍五入取整值,这两者并不是完全等价的,只是十分接近。
正如之前所述,您不应该基于像素大小来确定某些东西,因为您可以进行缩放。这里谈到的是屏幕上显示的清晰程度。
在显示器上,如果您想在20英寸的距离(显示器到眼睛的平均距离)下获得清晰度(< 0.20 DP中等清晰度/0.16 DP超清晰),需要以下分辨率: 1920x1080(高清)17.4英寸/14英寸 3840x2160(4K)35英寸/27.8英寸 高分辨率手机可能具有0.05 DP(约500 ppi),或比超清晰监视器高3倍,但观看距离缩短了3倍。DP是仅考虑屏幕物理尺寸时的分辨率。当您使用DP时,它会将您的布局缩放到具有不同像素密度的其他类似尺寸的屏幕。
偶尔您实际上需要像素,当您在代码中处理尺寸时,您始终在处理真实像素,除非您将它们转换。