Android支持四种不同的dpi模式:ldpi mdpi hdpi xhdpi
一般地,手机分辨率与所运行的dpi模式是匹配的,例如hvga(320x480像素)的手机屏幕一般在3.5英寸左右,运行在mdpi模式下(也有例外,稍后解释)(这个是ROM控制的,app不能改变)。当运行在mdpi下时,1dp=1px:也就是说设计师在PS里定义一个item高48px,开发就会定义该item高48dp;Photoshop中14px大的字体,开发会定义为14sp。
对于一部wvga(480x800)手机(G7、N1、NS),一般是运行在hdpi模式下。当运行在hdpi模式下时,1dp=1.5px:也就是说设计师在PS里定义一个item高72px,开发就会定义该item高48dp;Photoshop中21px大的字体,开发会定义为14sp。
所以,当你的app需要适配多个dpi模式的时候(例如同时适配mdpi与hdpi),若你在wvga下做设计,你需要将你的各数值都为3的倍数,并在切图标注时将所有的数字除以3乘以2换算成dp,这样开发的同一套layout就能用在两个不同的dpi模式下,而不是写两套layout。
px( pixel) 像素,可以简单的理解为一个点或方块,用以颜色的显示(单位),一般指印刷品或屏幕设置设备的颜色显示定义。
dip(device independent pixels)设备独立像素. 不同设备有不同的显示效果,这个和设备硬件有关,多为了支持WVGA、HVGA和QVGA 使用,不依赖像素。 dpi(dots per inch)分辨率、解析度,每英寸像素数,多用于屏幕显示领域。类似的有ppi(Pixels per inch)多用于印刷领域。分辨率越高,则每英寸内包含的像素数越大。 sp (scaled pixels)像素(图像)缩放,在 常规情况下,尺寸大的图像(像素数量或密度高)缩放为小图像(像素数量或密度小)时清晰度不变或清晰(原图模糊时),逆向则反之。但可以通过像素插值/超样采集等技术实现相对清晰(计算轮廓边缘模拟出相似或智能分析增加清晰度、圆润感) px(像素)和dpi(分辨率)的关系,分辨率表示每英寸内包含多少个像素,比如分辨率为72dpi时,即表明每英寸内有72个像素。在屏幕显示时像素和屏幕上的点可以是点对点或非点对点。 sp(像素缩放)和px、dpi之间没有直接换算关系,比如一个原始图像为100×100px时,把它缩放为60×60或40×80(等比例缩放或自由缩放)相关的像素排列和原始颜色会打乱,减低或保持包含颜色数量(在常规放大时不会增加包含的颜色数量),边缘颜色数量会减少。dip和以上有些相似,这个因为未涉及不是很了解。网上找到一个换算/计算公式供参考:据px = dip * density / 160,则当屏幕密度为160时,px = dip 根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。
著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:刘志强 链接:http://www.zhihu.com/question/19625584/answer/28015382 来源:知乎
一、度量单位的定义 1、dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA(800*480)、HVGA和QVGA 推荐使用这个,不依赖像素。 dp是开发写layout的时候使用的尺寸单位,sp是开发写layout时关于字体的字号单位。 2、分辨率是屏幕图像的精密度,是指显示器所能显示的像素点的多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。 3、px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。px是分辨率的单位,也就是说320x480的分辨率内,共有153600px个像素。 4、屏幕密度:表示每英寸有多少个显示点,与分辨率是两个不同的概念。单位是dpi(dot per inch)。 dpi的计算:dpi=Diagonal pixel/ Screen size Diagonal
pixel表示对角线的像素值
比如:计算WVGA(800*480)分辨率,3.7英寸 DPI= =933/3.7=252 Android主要有以下几种屏:如下表
二、视觉与客户端之间的沟通 1、例如,视觉给出的视觉稿标注的就是12 dp,这样客户端开发就不需要换算,可以直接使用12 dp。每一台移动设备都会自动根据屏幕尺寸调整间距,字体大小,来保证这个间距是12 dp。 2、当视觉给出的视觉稿标注的是像素时,需要客户端的开发先计算出相应的dp,具体的计算公式为:px
= dip * (density / 160),然后使用计算出的dp,移动设备会自动适配。 同时也就是说,当屏幕密度为160时,px = dip。 确定的dp,就是不同的设备,间距的像素值可能会不同,但是dp一定相同。 3、例如分辨率为320 x480时,屏幕尺寸为3.0—3.5时,屏幕密度为Medium,默认值为160,由公式得px=dp;当分辨率为480 x800时,屏幕尺寸为3.3—4.0时,屏幕密度为high默认值为240,由公式的px=1.5dp,字号(在系统中选择普通字号)是视觉给字号大小的1.5倍,px=1.5sp。
|