一直困扰设计师多年的Android ...

  • 经验类型规范/资料原作者:原作者

  • 经验属性原创文章
  • 经验版权署名
22830 24 119 2015-03-27

轻松理解Android开发单位DP ,让设计与开发高度匹配,整合了网上各大资料汇总一个通俗易懂的。

一直困扰设计师多年的Android 单位 dp

设计这么多年了,相信很多设计师,一直被DP搞得晕头转向的,因为我们设计常用单位是PX ,设计的时候我们用这个单位,但是开发人员则用dp,如何保证设计的产品效果图,文字能让开发人员,准确还原,这里我们就不得不提sp

Android 为什么引入dp?

是因为这个世界上存在着很多不同屏幕密度的手机,屏幕密度是什么?就是ppi,就是单位长度里的像素数量。

  想象一下,如果这些手机的尺寸一样,屏幕密度相差很大,那么是不是说一个手机水平方向上像素很少,另一个手机水平方向上像素很多?那我们画同样pix数量的时候,它显示的长度不就会不一样了?

  比如下图中的两个手机,同时设置2px长度的Button,在屏幕密度较高的手机里就会显示的比较小。

  而同时设置的2dp长度的Button,在两个手机上显示的大小是一样的。

Android常用单位:

1.屏幕尺寸in(英寸):指实际的物理尺寸,为屏幕对角线的测量。一般讲的大小单位都是英寸,比如iPhone5S的屏幕尺寸是4英寸。

2.像素(pixel):屏幕上的点,基本原色素及其灰度的基本编码。

3.分辨率(Resolution):是指屏幕上垂直方向和水平方向上的像素个数。(比如iPhone5S的分辨率是1136*640)

4.dpi:dot per inch,就是每英寸的像素数,也叫做屏幕密度。这个值越大,屏幕就越清晰。

5. dp=dip : device independent pixels(设备独立像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。

 
6. sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时,1sp=1px。

对ppi 的理解:

ppi= Pixels per inch,每英寸上的像素数数目,即 "像素密度“

屏幕尺寸in(英寸):指实际的物理尺寸,为屏幕对角线的测量。

而ppi的运算方式是:

PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数

举个简单的列子,iphone5的ppi是多少?ppi=√(1136px²+ 640px²)/4 in=326ppi(视网膜Retina屏)

为解决Android设备碎片化,引入一个概念dp,一种基于屏幕密度的抽象单位。

 Android把屏幕密度分为了四个广义的大小:

低(120ppi)、中(160ppi)、高(240ppi)和超高(320ppi)

 dp是(设备独立像素)不同设备有不同的显示效果,这个和设备硬件有关是虚拟像素,在不同的像素密度的设备上会自动适配。

在每英寸160ppi的显示器上,1dp= 1px。

关于dp与px 单位换算:

dp=dip:device independent pixels(设备独立像素)不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA推荐使用这个,不依赖像素。

dp是一种与密度无关的像素单位,在每英寸160点的屏幕上,1dp=1px

dp和px的换算公式 :dp*ppi/160 =px

比如,在一个240ppi的屏幕里,比如1dp x 240/160 =1.5px。 即 1dp=1.5px,

mdpi(160ppi)  1dp = 1px ;  hdpi  (240ppi)1dp=1.5px;

Xhdpi(320ppi )1dp=2px;    xxhdpi(480ppi )1dp=3px;

对于设计人员而已,我们要把dp转化为px,  只是需要利用公式:

px=dp*ppi/160

mdpi: 1.0 (baseline)    1dp=px

hdpi: 1.5              1dp=1.5px

xhdpi: 2.0              1dp=2px

xxhdpi3.0                     1dp=3px

把dp 转化为px  公式为:

dp乘以每个密度下面的系数比值

常见手机分辨率:

4:3

VGA       640*180(video graphics array)

QVGA    320*240(Quarter VGA)

HVGA    480*320(half-size VGA)

SVGA    800*600(Supper VGA)

5:3

WVGA  800*480(WideVGA)

 

16:9

FWVGA  854*480(full wide VGA)

HD     1920*1080(high definition)

QHD      960*540

720p     1280*720 标清

1080P     1920*1080  超清

Android 字体单位:

sp:Scale-independentpixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时,1sp=1px。

Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

默认系统字体   英文:Roboto;中文:DroidSans Fallback  与微软雅黑很像

Android L 常用字体边距规格对照表:

AndroidL 常用字体边距规格对照表:参考资料:

参考资料:

http://www.cnblogs.com/greatverve/archive/2011/12/28/android-dip-dp-sp-pt-px.html

http://zhuanlan.zhihu.com/zhezhexiong/19565895 

http://www.360doc.com/content/07/0111/10/11821_326037.shtml

全部评论:24

  • bbt

    2017-03-14 23:31

    你好,请教下。Mdpi hdpi xhdpi xxhdpi,这几个都没有提到屏幕英寸。 我现在就碰到1080* 1920 5.5寸,计算得出dpi 400,除以160,DP就是2.5。 不属于上述4个分类中的任何一种,那在进行单位换算时,怎么办呢,乘以2.5,还是向xhpdi或者xxhdpi靠拢? 先谢过了,真的好困惑

  • songivan

    2016-08-01 15:03

    @KyleFun: 对的,这位同学看得很仔细,已修改了谢谢提醒

  • songivan

    2016-08-01 15:00

    @Gala_Gao: 这种就四舍五入,分配到旁边比较接近的PPI,其实常规的机型满足即可,真的有特殊的,就看与那个跟接近

  • Gala_Gao

    2016-06-04 16:36

    很多手机屏幕换算出来的ppi都不是480,320,比如5寸1080p的手机ppi为440,5.5寸则为400,这样的情况该如何处理呢?

  • sayacat

    2016-04-21 15:55

    比如,在一个240ppi的屏幕里,比如1dp x 240/160 = 2px(这里是不是写错了?)。 即 1dp=1.5px,

  • Summer_Fu

    2015-10-14 11:46

    基本懂,多谢!

  • KyleFun

    2015-09-07 14:40

    @songivan: 他不理解很正常 一开始我也不没看明白给的公式和结论是怎么算出来的 不知道作者对公式是不是真的理解了 dp*dpi/160=px 这里dp 和 px是可以带具体数值进去算出结果的 也就是这里dp和px是当做未知数x y使用的 后来给出的结论 xhdpi时 1dp=2px 这里的dp和 px是单位 不能代数 但是读者以正常的阅读顺序都会用文中给出的公式算一下 结过算出来必然会糊涂 所以希望楼主还是能改一下dp px 区分大小写

  • KyleFun

    2015-09-07 14:15

    文章里px和dp一会当未知数xy用 一会当单位用 很容易让人误解 至少应该区分下大小写

  • KyleFun

    2015-09-07 14:14

    1dp x 240/160 = 2px 还有这个是怎么算出来的 1dpx1.5=2px?

  • KyleFun

    2015-09-07 13:55

    请问px=dp*ppi/160 那在240ppi的情况下 1px=1dp*240/160 即 1px=1dp*1.5 那就是1px=1.5dp 那上面文章说的1dp=1.5px是怎么算出来的?

  • 宋聚安

    2015-07-24 10:12

    偷点懒 其实只需要记住这个常用的,基本就OK了 吧 hdpi: 1dp=1.5px xhdpi 1dp=2px xxhdpi 1dp=3px

  • Conysun

    2015-06-18 15:36

    好棒!谢谢

  • zhang_xu

    2015-05-21 16:45

    @正能量嗳喵夭夭: 1 , DPI 在这里就是 PPI 的意思,DPI 也叫 Dot Per Inch 也就是“点每英寸”的意思,在不同的设备上代表了不同的语义,在屏幕上的话,一个 Dot 同时代表一个 Pixel. 所以很多人也把屏幕上的 DPI 叫做 PPI 2 , 关于那个公式,可以用 Google 的基础定义递推,在 160dpi 的设备上 1 px = 1dp 所以除以的基数就设置为 160, 为什么 Google 当初定义为 160 ? 因为第一部安卓手机的 G1 的像素密度约等于 160dpi, 所以当初就这么设定了,其实这部手机的分辨率约等于 180dpi, 但是选择 160 这个数字的具体原因恐怕只有 Google 知道了

  • zhang_xu

    2015-05-21 12:18

    Android L 中文字体是 NOTO 也叫思源黑体 droid sans fallback 是 5.0 之前的中文字体

  • chervi

    2015-04-16 13:02

    棒!

  • 正能量嗳喵夭夭

    2015-04-16 11:27

    @songivan: 谢谢啦,公式这个后来我有问过同事,,然后理解了,,是我一开始理解方向不对,,把那个公式当作一元方程式那种了,,,

  • songivan

    2015-04-03 13:21

    @正能量嗳喵夭夭: 第一:ppi 和dpi本身不是一个意思,但是在我们移动端换算理解是一个意思,所以这里是等同的,如果还有疑惑,请自己去查找相关资料,在这里不细讲,绕太远了。
    第二,公式不是喊你直接按照乘法公式运算,是套用的。
    这些东西都要自己结合实例去内化,理解....无论是新手还是老设计是,都要多思考,用自己的方式吸收,别人给的永远只是个参考而已。

  • 杭州OT

    2015-03-31 22:36

    非常感谢~解决困扰已久的问题

  • OneZero丶

    2015-03-31 17:34

    感谢,自己在笔记本上也做过换算。还是感谢分享出来。

  • 正能量嗳喵夭夭

    2015-03-31 12:41

    作为设计新手,看这个文章很多地方觉得不明白,,
    1、文章里面一会儿讲ppi,一会儿又用dpi,,这两个东西,,不是一个吧,,为什么不区分清楚
    2、文章里给出的关于dp和px换算的公式,,为什么我算不出来,,这个公式真的没有问题么?

  • 科比豪

    2015-03-30 23:22

    非常感谢!很重要!

  • K11

    2015-03-30 10:34

    当我看到,这文章,感激之情涌上心头,文章是一篇重量级的资料。

  • XU小欧

    2015-03-29 09:34

    非常好!!!!!!!!!太赞

  • 梵_任

    2015-03-28 12:48

    太不够厚道了,看完居然都没有评价的。这个解决了我多年的困惑。

更多作品

发表评论

取消

点击右上角
分享给朋友吧

分享到

取消

每人每天仅限5票,快给你心仪的作品鼓励的一票。

投票