dp 这个单位是安卓发明的么?为什么 px=dp*(dpi/160)?

在Xdpi下绘制Xpx长度,实际的物理距离都是1英寸,为什么一定要选160呢? 如果设定宽高为厘米,或者英寸之类的物理单位,屏幕根据dpi的大小来计算…
关注者
811
被浏览
156,435

17 个回答

作为一个经常拿着计算器算长宽,然后给 Android 应用各个分辨率提供界面切图的死美工,我想尝试回答一下后半个问题,也就是为啥以 160 dpi 作为基准:

Android Design [1] 里把主流设备的 dpi 归成了四个档次,120 dpi、160 dpi、240 dpi、320 dpi


实际开发当中,我们经常需要对这几个尺寸进行相互转换(比如先在某个分辨率下完成设计,然后缩放到其他尺寸微调后输出),一般按照 dpi 之间的比例即 2:1.5:1:0.75 来给界面中的元素来进行尺寸定义。

也就是说如果以 160 dpi 作为基准的话,只要尺寸的 DP 是 4 的倍数,XHDPI 下乘以 2,HDPI 下乘以 1.5,LDPI 下乘以 0.75 即可满足所有尺寸下都是整数 pixel 。

但假设以 240 dpi 作为标准,那需要 DP 是 3 的倍数,XHDPI 下乘以 1.333,MDPI 下乘以 0.666 ,LDPI 下除以 2

而以 LDPI 和 XHDPI 为基准就更复杂了,所以选择 160 dpi

话说我觉得在给 Android 的应用提供切图的时候经常像是在算 24 点。。。

[1] developer.android.com/d

1 是不是Android 发明的DP,这个我不知道,参考别人的答案吧。(是安卓定义了这个单位,但这类概念相信早就有了)

2 为什么选160,因为第一款机子是160,于是就成为标准了。(160 约等于HVGA 屏幕手机的像素密度)

3 为什么要用DP,简单来说减少开发成本。

一个app要在240x320 分辨率的低端机上运行,也要在1080P 的高端机上运行,软件写代码的时候,这个图标定义多大呢。用px做单位显然不合适了,所以引入了dp。不同开发多个版本而实现UI的自适应。

系统只认px,不认识厘米,设定160dp的长度,相当于告诉手机在160dpi屏幕上显示160px,在240dpi屏幕上显示240px 。如果根据屏幕密度换算像素让系统去用,你这台手机是方便了,"在Xdpi下绘制Xpx长度,实际的物理距离都是1英寸" 屏幕升级了呢?代码重写一遍再调一次UI?

话说iOS就是为了省事,iPHone4 直接翻倍。原来iPhone iPhone 3G iPhone 3GS 都是160,突然iPhone4 就320了。为的是开发者方便,UI大小相关的乘以2即可,GUI设计切图无脑放大一倍,

@JJ Ying

同学也不同按计算器算24了。但是翻倍一时爽,看着Android阵营屏幕稳步升级,iPhone总不能再翻倍吧,320已经视网膜了。所以iPhone 5 只好加长了,被逼无奈。

@JJ Ying

同学还是可以按照iPhone 4 的规格切图,软件只要针对iPhone 5 调整下坐标位置就好了。

然后我为iPhone 6 捉急啊,如果要上1080P,就没有省事的方案了,

@JJ Ying

同学又得拿出计算器切图了 XD