1、px

即像素,1px代表屏幕上的一个物理像素点。
“pixel” 的缩写,像素。是画面显示的基本单位,真实的像素并不是点或者方块(虽然有时这样显示),也没有实际固定长度,只是一个抽象的取样。设计中的像素和实际显示屏上的像素相对应。

屏幕的分辨率一般就描述为“宽向像素数X纵向像素数”。比如 Android手机常见的分辨率有:320 X 480, 480 X 800, 1080 X 1920等。

2、dp

dip:device independent pixels(设备独立像素),dp与dip一样,不同的设备有不同的显示效果,一般为了支持WVGA、HVGA和QVGA推荐使用这个,不依赖像素。
定义dp为 160dpi 时的一个像素大小;那么到 320 dpi 时,它就相当于两个像素。

px= dp (dpi/160)
这样的话,假如做一个50
50dp的icon,放到160dpi的屏幕上就是50px50px,放到320dpi的屏幕上就是100px100px。各元素的布局和比例便不会失调。

3、sp

sp:scale-independent pixels(缩放独立像素),与缩放无关的抽象像素,它和dp很相似,但唯一的区别在于,Android系统允许用户自定义文字尺寸大小(小,正常,大,超大等),当文字尺寸是“正常”时,1sp=1dp=0.00625inch(英寸),当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625inch
这里插一句 sp 这个单位,sp 跟 dp 类似,全称是 scale-independent pixel (也会缩写为 sip), 即“独立比例像素”。sp 主要用作字体的单位,开发用此单位设置文字大小,这样在不同像素密度的屏幕上能进行同比例的扩大缩小。

4、dpi

dpi是像素密度,指的是在系统软件上指定的单位尺寸的像素数量,它往往是写在系统出厂配置文件的一个固定值

我为什么要强调它是软件系统上的概念?
因为大家买手机的时候,往往会听到另一个叫ppi的参数,这个在手机屏幕中指的也是像素密度,但是这个是物理上的概念,它是客观存在的不会改变。dpi是软件参考了物理像素密度后,人为指定的一个值,这样保证了某一个区间内的物理像素密度在软件上都使用同一个值。这样会有利于我们的UI适配。

比如,几部相同分辨率不同尺寸的手机的ppi可能分别是是430,440,450,那么在Android系统中,可能dpi会全部指定为480.这样的话,dpi/160就会是一个相对固定的数值,这样就能保证相同分辨率下不同尺寸的手机表现一致。

我们可以说,通过dp加上自适应布局和weight比例布局可以基本解决不同手机上适配的问题,这基本是最原始的Android适配方案。

dpi:dots per inch(每英寸点数,或者说每英寸像素数目 更易懂),即:是指屏幕上每英寸(1英寸 = 2.54 厘米)距离中有多少个像素点。如果屏幕为 320*240,屏幕长 2 英寸宽 1.5 英寸,Dpi = 320 / 2 = 240 / 1.5 = 160。
由设备决定,是写死的,可以通过context.getResources().getDisplayMetrics().densityDpi获取到。当然,也可以通过以下方法算出:

dpi=横向分辨率/横向英寸数=纵向分辨率/纵向英寸数
安卓手机种类多样,有各种屏幕像素密度。比如120dpi是低密度(ldpi)类型,160dpi 是中密度(mdpi),240dpi是高密度(hdpi),320dpi是超高密度(xhdpi),480dpi是超超高密度(xxhdpi)。

Google 规定的屏幕密度列表:

ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi

就如有的UI给的图会有这样的标注:

5、 ppi

这个在手机屏幕中指的也是像素密度,但是这个是物理上的概念,它是客观存在的不会改变
dpi是软件参考了物理像素密度后,人为指定的一个值,这样保证了某一个区间内的物理像素密度在软件上都使用同一个值。这样会有利于我们的UI适配

6、 in

inches的缩写,英寸。就是屏幕的物理长度单位。一英寸等于2.54cm。比如Android手机常见的尺寸有5寸、5.5寸、6寸等,这里的长度都是指手机对角线的长度。

7、pt

“points” 的缩写,点。一个点等于1/72英寸,所以“点”也是个长度单位而已。

8、 Density(密度)

这个是指屏幕上每平方英寸(2.54 ^ 2 平方厘米)中含有的像素点数量。

单位的换算:

dpi与density的关系

dpi = density*160

px与density

px = density * dp
px = (dpi / 160)*dp

dp与px

px=dp*(dpi/160)
dp=px/(dpi/160)

sp与px

px=sp*(dpi/160)
sp=px/(dpi/160)

获取DisplayMetrics对象方法:

DisplayMetrics dm=new DisplayMetrics();
//获得DisplayMetrics对象方法一
//dm=context.getResources().getDisplayMetrics();
//获得DisplayMetrics对象方法二
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);

px转其他单位代码:(该方法来自TypedValue)

public static float applyDimension(int unit, float value,DisplayMetrics metrics){switch (unit) {case COMPLEX_UNIT_PX:return value;case COMPLEX_UNIT_DIP:return value * metrics.density;case COMPLEX_UNIT_SP:return value * metrics.scaledDensity;case COMPLEX_UNIT_PT:return value * metrics.xdpi * (1.0f/72);case COMPLEX_UNIT_IN:return value * metrics.xdpi;case COMPLEX_UNIT_MM:return value * metrics.xdpi * (1.0f/25.4f);}return 0;}

另外一种px转dp的代码:

/** * 根据手机的分辨率从 px(像素) 的单位 转成为 dp */  public static int px2dip(Context context, float pxValue) {  final float scale = context.getResources().getDisplayMetrics().density;  return (int) (pxValue / scale + 0.5f);  }

dp转px:

/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */  public static int dip2px(Context context, float dpValue) {  final float scale = context.getResources().getDisplayMetrics().density;  return (int) (dpValue * scale + 0.5f);  }

转载于:https://www.jianshu.com/p/a895dbed1c3b

android设备的屏幕单位中的px(像素)、dp与sp的区别以及换算相关推荐

  1. px,dp与sp的区别以及换算

    1.px 即像素,1px代表屏幕上的一个物理像素点. "pixel" 的缩写,像素.是画面显示的基本单位,真实的像素并不是点或者方块(虽然有时这样显示),也没有实际固定长度,只是一 ...

  2. android UI设计图片和文字尺寸px对应dp、sp值换算

    屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等. 屏幕分辨率:指在纵横向上的像素点数,单位是px,1px为 ...

  3. Android的px、dp、sp的区别

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

  4. .net开发安卓入门 - 布局与样式(像素单位px、dp、sp的区别)

    .net开发安卓入门 - 布局与样式 布局 LinearLayout RelativeLayout TableLayout RecyclerView ListView GridView GridLay ...

  5. mac android屏幕演示,如何在Mac上录制Android设备的屏幕 | MOS86

    记录和捕获Android设备的屏幕比以前更容易.您现在可以使用多种工具来帮助您记录设备从使用ADB记录您的屏幕到使用AirDroid无线捕获屏幕截图,没有任何工具完成工作.其中一个很棒的实用程序是An ...

  6. android allow usb debugging,远程调试Android设备 - Chrome 开发者工具中文文档

    在Windows,Mac 或 Linux 上远程调试 Android 设备上的实时内容. TL;DR 设置你的Android设备进行远程调试,并从开发机中发现它. 从您的开发机器检查和调试Androi ...

  7. Android px、dp、sp之间相互转换

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

  8. Android的px、dp和sp

    Android的px.dp和sp px: 即像素,1px代表屏幕上一个物理的像素点:偶尔用到px的情况,是需要画1像素表格线或阴影线的时候. dp: 这个是最常用但也最难理解的尺寸单位.它与" ...

  9. Android:长度单位详解(px、dp、sp)

    长度单位 1.重要概念 1.1 屏幕尺寸 1.2 屏幕分辨率 1.3 屏幕像素密度 1.4 屏幕尺寸.分辨率.像素密度三者关系 2.六种单位介绍 2.1.dp和px的换算 2.2.在代码中转换单位 2 ...

最新文章

  1. CxImage类库的简介
  2. java中Error与Exception有什么区别
  3. 查看linux java home_查看Linux中自带的jdk,设置JAVA_HOME
  4. php中转,使用 PHP Curl 做数据中转
  5. 小心!目录删除及重命名操作 ,一定丢失Session~~!
  6. 架构师之道:面向组件的Web架构设计
  7. c#客户端 通过用户名密码访问服务器文件,C#如何连接服务器共享文件夹
  8. boost::python::indirect_traits相关的测试程序
  9. 整理了90个Pandas案例,强烈建议收藏!
  10. zip伪加密破解方法
  11. ubuntu下安装golang环境
  12. 10.FreeRTOS学习笔记-中断管理
  13. 云计算遇上区块链,会产生怎样的能量和火花?
  14. Data Structures[翻译]
  15. Promise/A+规范
  16. cmake之交叉编译arm32/arm64(四)
  17. matlab船舶静水力曲线,静水力曲线图
  18. 易语言5.4一键破解工具
  19. 电路设计_元器件选型总结1
  20. Word目录:【同一篇文档设置多个独立目录】详细过程

热门文章

  1. hdu 1814 Peaceful Commission 题解
  2. 利用SparkSQL Logical Plan Parse 打造大数据平台SQL诊断利器
  3. Acknowledgements in AI article
  4. plsa matlab实现
  5. 基于组态王6.55的实时数据采集助手V1.0
  6. 征服number类型的input框
  7. CUDA运行API:RuntimeAPI
  8. Qt 查看Qt助手的方法
  9. [渝粤教育] 四川农业大学 计算机网络 参考 资料
  10. 欧尼酱讲JVM(14)——堆