px,dp,dip,dpi,sp 等到底有什么联系区别

2024-05-06 15:08

1. px,dp,dip,dpi,sp 等到底有什么联系区别

  px(像素)是我们UI设计师在PS里使用的(不解释),同时也是手机屏幕上所显示的(也不解释)
  dp是开发写layout的时候使用的尺寸单位,sp是开发写layout时关于字体的字号单位,且dp与sp总为1:1关系。

  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。

  mdpi与hdpi是2:3的关系
  mdpi与xhdpi是1:2的关系
  ldpi与mdpi是3:4的关系

  Galaxy Nexus 是720P屏幕,就是运行在xhdpi下的。

  可以想见为什么iOS的开发者升级到 Retina Display 是多么的无痛

  再补充一种例外,有些比较山寨的Pad有可能是7英寸屏幕,分辨率为wvga(480x800)运行在mdpi下,所以一部wvga手机是320x533dp,一部wvga平板是480x800dp,可以显示的内容会多很多。

  我语言没有梳理的很清楚,希望你看得懂:P

px,dp,dip,dpi,sp 等到底有什么联系区别

2. 分辨率的基本单位是dpi还是pix还是px

描述分辨率的单位有:
dpi(点每英寸)、lpi(线每英寸)和ppi(像素每英寸)。
但只有lpi是描述光学分辨率的尺度的。虽然dpi和ppi也属于分辨率范畴内的单位,但是他们的含义与lpi不同。而且lpi与dpi无法换算,只能凭经验估算。

分辨率主要是指显示器所能显示的像素的多少,可以从显示分辨率与图像分辨率两个方向来分类。 
显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素的多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。
显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。 图像分辨率则是单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义。
通常,“分辨率”被表示成每一个方向上的像素数量,比如640X480等。而在某些情况下,它也可以同时表示成“每英寸像素”(ppi)以及图形的长度和宽度。比如72ppi,和8X6英寸。   
pi和dpi经常都会出现混用现象。但是他们所用的领域也存在区别。从技术角度说,“像素”只存在于电脑显示领域,而“点”只出现于打印或印刷领域。ppi和lpi可以换算,lpi等于ppi的一半,但是取决于纳奎斯特极限。

3. px、dp、sp、dpi之间的区别和转换

px、dp、sp、dpi之间的区别和转换 
  
   区别:
    
  
 px (pixels)像素 -- 是像素,就是屏幕上实际的像素点单位。(一般UI人员在ps中经常使用)
  
 dp/dip 设备独立像素,android layout经常使用的尺寸单位,与设备屏幕有关,dp是虚拟像素,在不同的像素密度的设备上会自动适配。即与像素密度无关。
  
 sp 放大像素,主要是处理字体的大小
  
 dpi:Android支持四种不同的dpi模式:ldpi mdpi hdpi xhdpi
  
 hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
  
 mdpi里面存放中等分辨率的图片,如HVGA (320x480)
  
 ldpi里面存放低分辨率的图片,如QVGA (240x320)
  
 转换:
  
 a.首先了解常见的分辨率Resolution:
  
 分辨率:指手机屏幕垂直和水平方向上的像素个数。比如分辨率是480*320,则指设备垂直方向有480个像素点,水平方向有320个像素点。
  
 VGA 显示绘图矩阵 640×480
  
 HVGA half 480×320
  
 QVGA quarter 320x240
  
 b.dpi像素密度,指每英寸中的像素数,该值对应于DisplayMetrics类中属性densityDpi的值
  
 (例子:设备分辨率为320*240,屏幕长2英寸宽1.5英寸 dpi=320/2=240/1.5=160)
  
 c.density屏幕密度,指每平方英寸中的像素数,在DisplayMetrics类中属性density的值为dpi/160(用这个进行dp sp之间的转化)
  
 如图:
  
 
  
                                          
 d.px 和 dp 互转换
  
 计算公式:实际像素数px=1dp*像素密度(dpi)/160 =dp*density
  
 在320x480分辨率,像素密度dpi为160,1dp=1px
  
 在480x800分辨率,像素密度dpi为240,1dp=1.5px
  
 /**
  
 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
  
 */
  
 public static int dip2px(Context context, float dpValue) {
  
 final float scale = context.getResources().getDisplayMetrics().density;
  
 return (int) (dpValue * scale + 0.5f);
  
 }
  
 /**
  
 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
  
 */
  
 public static int px2dip(Context context, float pxValue) {
  
 final float scale = context.getResources().getDisplayMetrics().density;
  
 return (int) (pxValue / scale + 0.5f);
  
 }

px、dp、sp、dpi之间的区别和转换

最新文章
热门文章
推荐阅读