px,dp,dip,sp,in,mm,pt详细分析

px   :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

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

dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px。

sp   :(scaled pixels—best for text size),带比例的像素,与dp相似,但还会根据用户的字体大小偏好来缩放。Google建议使用sp作为文本的单位,其它用dip。

in    :(inches)英寸

mm :(millimeters)毫米

pt    :(points),磅,1/72 英寸

针对dip和px 的关系,做以下概述:

QVGA屏density=120;          QVGA(240*320)

HVGA屏density=160;          HVGA(320*480)

WVGA屏density=240;         WVGA(480*800)

WQVGA屏density=120          WQVGA(240*400)

density值表示每英寸有多少个显示点,与分辨率是两个概念。

不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)为例

density=120时

屏幕实际分辨率为240px*400px (两个点对应一个分辨率)

density=160时

屏幕实际分辨率为320px*533px (3个点对应两个分辨率)

density=240时

屏幕实际分辨率为480px*800px (一个点对于一个分辨率)

apk的资源包中

当屏幕density=320时,使用xhdpi 标签的资源

当屏幕density=240时,使用hdpi 标签的资源

当屏幕density=160时,使用mdpi标签的资源

当屏幕density=120时,使用ldpi标签的资源。

不加任何标签的资源是各种分辨率情况下共用的。

布局时尽量使用单位dip,少使用px

dp与px换算公式:

pixs =dips * (densityDpi/160).

dips=(pixs*160)/densityDpi

dp与px转换的方法:

public static int dip2px(Context context, float dipValue){

  final float scale = context.getResources().getDisplayMetrics().density;

  return (int)(dipValue * scale +0.5f);

}

public static int px2dip(Context context, float pxValue){

  final float scale = context.getResource().getDisplayMetrics().density;

  return (int)(pxValue / scale +0.5f);

}

如何获得设备的屏幕分辨率和屏幕密度?

例如分辨率为480*800,密度为240的设备,方法如下:

DisplayMetrics dm =getResources().getDisplayMetrics();

可以获取到:

dm.densityDpi=240

dm.widthPixels=480

dm.heightPixels=800

名词解释

Px(Pixel像素)

不同设备显示效果相同。这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px。也正是因为如此才造成了UI在小分辨率设备上被放大而失真,在大分辨率上被缩小。

Screen Size(屏幕尺寸)

一般所说的手机屏幕大小如1.6英寸、1.9英寸、2.2英寸,都是指的对角线的长度,而不是手机面积。我们可以根据勾股定理获取手机的宽和长,当然还有面积。

Resolution(分辨率)

指手机屏幕垂直和水平方向上的像素个数。比如分辨率是480*320,则指设备垂直方向有480个像素点,水平方向有320个像素点。

Dpi(dots per inch 像素密度)

指每英寸中的像素数。如160dpi指手机水平或垂直方向上每英寸距离有160个像素点。假定设备分辨率为320*240,屏幕长2英寸宽1.5英寸,dpi=320/2=240/1.5=160

注意:该值对应于DisplayMetrics类中属性densityDpi的值

Density(密度)

指每平方英寸中的像素数。

Density=Resolution/Screen size

注意:在DisplayMetrics类中属性density的值为dpi/160,可用于px与dip的互相转换

Dip(Device-independent pixel,设备独立像素)

同dp,可作长度单位,不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。dip和具体像素值的对应公式是dip值 =设备密度/160* pixel值,可以看出在dpi(像素密度)为160dpi的设备上1px=1dip

Sp(ScaledPixels 放大像素)

主要用于字体显示(best for textsize)。根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知 Android 默认使用 sp 作为字号单位。

HD

HD就是高分辨率数字电视的标准,分辨率为1280px x 720px,(720p/720i)

FHD

(Full FD),分辨率为1920px x 1080px , (1080p/1080i)

QHD

Quarter High Definition(FULL HD 1920×1080px的四分之一(面积)),分辨率为960x540px

Android开发中为适配上述三个分辨率下的资源文件,各资源文件夹名为:

HD:     drawable-sw360dp-xhdpi

FHD:   drawable-sw540dp-xhdpi

QHD:  drawable-sw270dp-xhdpi

这里的sw<N>dp表示这个文件夹下面的布局文件只有在设备短边的最小宽带为N时才加载。例如设备是960x540px的分辨率,那么这个apk安装在你的设备上就会加载 layout-sw480dp里面的布局文件,注意Manifest.xml中还需要设置。

px,dp,dip,sp,in,mm,pt详细分析的更多相关文章

  1. 在Android中,px,dp,dip,sp的不同之处

           最近在学习Android开发,一直没有弄清楚px,dp,dip,sp的区别.今天正好有时间,就花时间研究了一下.     众所周知,Android厂商非常多,各种尺寸的Android手机 ...

  2. android:px,dp(dip),sp的差别

    1.px:表示屏幕的实际像素,比如320*480的屏幕在横向有320个像素,在纵向有480个像素,假设指定的某个空间的单位为px.那么在不同分辨率下的手机上.显示的都是指定的大小.一般不推荐使用px. ...

  3. Android计量单位px,in,mm,pt,dp,dip,sp和获取屏幕尺寸与密度

    ###########################################Android计量单位########################################### px ...

  4. px、dp、sp、mm、in、pt这些单位有什么区别?

    相信每个Android新手都会遇到这个问题,希望这篇帖子能让你不再纠结. px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小 ...

  5. Android中px, ppi, dpi, dp, dip, sp概念解析

    Android中px, ppi, dpi, dp, dip, sp概念解析

  6. Android的计量单位px,in,mm,pt,dp,dip,sp

    android中dip.dp.px.sp和屏幕密度 1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持 ...

  7. [Android问答] px、dp和sp,这些单位有什么区别?

    相信每个Android新手都会遇到这个问题,希望这篇帖子能让你不再纠结. px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小 ...

  8. Android 图片文字单位 px、dp、sp区别

    文章来源:http://www.cnblogs.com/bjzhanghao/archive/2012/11/06/2757300.html px:像素,一个像素点,1px代表屏幕上一个物理的像素点: ...

  9. Android中px和dip的区别

    在Android手机的诞生之初,由于Android系统是开源的,一开始便有众多的OEM厂商对Android手机进行深度定制,于是乎Android手机的皮肤和屏幕大小都变得百花齐放,这可苦逼了我们这群开 ...

随机推荐

  1. 在Git中一定要关注的crlf自动转换

    GitHub 第一坑:换行符自动转换 如果你已经做出了错误的选择,也不需要重新安装,可以直接使用命令行来修改设置.很简单,直接打开这货自带的命令行工具 Git Bash,输入以下命令,再敲回车即可: ...

  2. USB系列之八:透过ASPI执行SCSI命令

    在<USB系列之七>里我们介绍了ASPI的规范,并对一系列ASPI的命令做了测试,其中的02号命令是执行SCSI命令,我们专门在这篇文章中介绍,在<USB系列七>中,我们已经了 ...

  3. Delphi的文件操作(定义,关联,打开,读写,关闭)

    参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...

  4. 关于VMWARE虚拟机安装GHOST版XP后不能硬盘启动问题

    工具: VMware Workstation 9.0 Ghost xp sp3 中英 双语版 现象:建立硬盘分区,设置活动分区...ghost安装顺利,安装完成后不能硬盘启动,如果从硬盘启动则黑屏,出 ...

  5. Android ListView中带有时间数据的排序

    下面是activity: public class MainActivity extends Activity { private ListView mListView = null; private ...

  6. 在非MFC的win 32程序里面能够使用CString类

    论坛有会员用到了.,今天给大家说说CSring如何在非mfc下的调用第一:先要包含 #include "afx.h" 包含之后会报windows.h重复定义我们需要把这个头文件包含 ...

  7. 学DSP(二):目标芯片28335,GO!

    28335开发板有了,之前没有用过TI的片子,还是先看看这个东西是啥东西. 进入28335的中文网页: http://www.ti.com.cn/product/cn/tms320f28335    ...

  8. [转]UltraISO制作U盘启动盘安装Win7/9/10系统攻略

    原文地址:http://www.cnblogs.com/pchmonster/p/4716708.html U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便 ...

  9. Java Keyword -- super

    Reference: super When we override superclass's methods, but still want to invoke them, we can use ke ...

  10. HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET

    HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET HTML5 Canvas动画效果演示