px、dp和sp,这些单位有什么区别?

转载 2015年11月19日 19:38:02

px:

即像素,1px代表屏幕上一个物理的像素点;

px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guide,下同)。

偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他单位如dp会显得模糊。

dp:

这个是最常用但也最难理解的尺寸单位。它与“像素密度”密切相关,所以首先我们解释一下什么是像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。

不同的手机/平板可能具有不同的像素密度,例如同为4寸手机,有480x320分辨率的也有800x480分辨率的,前者的像素密度就比较低。Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。如果你拿这两部手机放在一起对比,会发现这个图片的物理尺寸“差不多”,这就是使用dp作为单位的效果,见下图。

更新20140701: 是不是所有android手机的屏幕宽度用dp衡量都是固定值(例如320dp)呢?答案是否定的,如果写一个程序画宽度等于320dp的横线,在不同手机上运行,会发现在有些手机上横线比手机屏幕短,有些则比屏幕长,在平板上与手机上相比差别则更加明显。

dip:

与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。

sp:

与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

还有几个比较少用到的尺寸单位:

mm:

即毫米;

in:

即英寸,1英寸=2.54厘米(约);

pt:

1pt=1/72英寸=0.035厘米;

最佳实践,文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize="16sp"、layout_width="60dp";偶尔需要使用px单位,例如需要在屏幕上画一条细的分隔线时:

<View layout_width="match_parent" layout_height="1px"/>

最后,推荐一张Android UI设计参考图:Android Design Cheat Sheet

参考资料:

Difference of px, dp, dip and sp in Android? 
Supporting Multiple Screens

DisplayMetrics

Android中px,dp,sp单位的区别和应用

下面的解释基本是百度得来的 px: px就是pixel的缩写啦,pixel即像素,它不是自然界的长度单位。px是就是一张图片中最小的点,一张位图就是由这些点构成的。1024px就是1024像素,最简单...
  • u010074743
  • u010074743
  • 2016年06月08日 15:34
  • 2407

【android布局】px、dp和sp,这些单位有什么区别?

相信每个Android新手都会遇到这个问题,希望这篇帖子能让你不再纠结。 px: 即像素,1px代表屏幕上一个物理的像素点; px单位不被建议使用,因为同样100px的图片,在不同手...
  • sy19901121
  • sy19901121
  • 2015年12月06日 11:12
  • 566

Android单位转换 (px、dp、sp之间的转换工具类)

package com.njxz.sy.deliverysystem.utils; import android.content.Context; /** * @创建时间:2016-1-4上午11:...
  • mouse12138
  • mouse12138
  • 2016年04月26日 11:23
  • 5548

Android像素单位dp、sp、px、pt的区别和比较

目录结构目录结构 前言 度量单位含义 换算规则前言在分辨率没有牛逼到爆的过去,程序员通常以像素为单位设计计算机用户界面。例如,图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸像素点数更高...
  • zinss26914
  • zinss26914
  • 2015年02月11日 11:56
  • 4558

Android开发之单位转换,dp、px、sp

Android开发之单位转换,dp、px、sp 在开放过程中,毕竟UI不是程序员画的,碰到专业技术好点的美工还好,碰到刚开始搞ui的,提供的图片尺寸,字体大小,切图尺寸各种让你无奈。在这里可以解...
  • z_x_Qiang
  • z_x_Qiang
  • 2017年06月23日 14:24
  • 360

android中像素单位dp、px、pt、sp的说明及hdpi mdpi ldpi xhdpi的比例

dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖...
  • chenguang79
  • chenguang79
  • 2015年03月13日 10:19
  • 1901

android中px与sp,dp之间的转换

由于Android手机厂商很多,导致了不同设备屏幕大小和分辨率都不一样,然而我们开发者要保持在不同设备上显示同样的视觉效果,就需要做一些适配效果。 相关名词解释 屏幕大小:通常指的是屏幕对角线的长...
  • qidingquan
  • qidingquan
  • 2016年12月17日 22:00
  • 3191

简述Android单位dp、sp、dip、px、等的区别和使用

废话就不多说了,直接说重点。首先解释下这几个单位的代表意思。 由于过去通常以像素为单位设计计算机用户界面。当一个像素在80x80的时候,在高分辨率显示器上运行该程序,则用户界面会显得很小。所以采用与...
  • Ae_fring
  • Ae_fring
  • 2016年08月05日 09:51
  • 1044

设计中各单位的转换px、pt、ppi、dpi、dp、sp及IOS的分辨率

设计中各单位的转换px、pt、ppi、dpi、dp、sp及IOS的分辨率
  • byszy
  • byszy
  • 2017年02月07日 15:07
  • 1162

px、dp和sp区别

px: 即像素,1px代表屏幕上一个物理的像素点; px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示。 dp: 这个是...
  • middle544291353
  • middle544291353
  • 2014年02月23日 16:00
  • 2407
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:px、dp和sp,这些单位有什么区别?
举报原因:
原因补充:

(最多只允许输入30个字)