1、概述

过去,程序员通常以像素为单位设计计算机用户界面。例如:图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题。Android应用开发支持不同的度量单位。

2、度量单位含义

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

dp: dip是一样的

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

pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
     sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

in(英寸):长度单位。 
    mm(毫米):长度单位。

3、度量单位的换算公式

在android源码包TypedValue.java中,我们看如下函数:

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;

}

该函数功能:是把各单位换算为像素。

metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;

metrics.scaledDensity:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;

metrics.xdpi:默认值为DENSITY_DEVICE;

DENSITY_DEVICE:为屏幕密度

DENSITY_DEFAULT:默认值为160

4、屏幕密度:表示每英寸有多少个显示点,与分辨率是两个不同的概念。

Android主要有以下几种屏:如下表

屏幕

Tyep

宽度

Pixels

高度

Pixels

尺寸

Range(inches)

屏幕密度

QVGA

240

320

2.6-3.0

low

WQVGA

240

400

3.2-3.5

low

FWQVGA

240

432

3.5-3.8

low

HVGA

320

480

3.0-3.5

Medium

WVGA

480

800

3.3-4.0

High

FWVGA

480

854

3.5-4.0

High

WVGA

480

800

4.8-5.5

Medium

FWVGA

480

854

5.0-5.8

Medium

备注

目前android默认的low=120 ;Medium =160; High = 240

5、综上所述

据px = dip * density / 160,则当屏幕密度为160时,px = dip
  根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。

Android中dip、dp、sp、pt和px的区别相关推荐

  1. Android中dip和sp的真正区别

    估计很少有人知道Android里面dip和sp的真正区别,无论你在网上怎么搜,搜出来的结果都是告诉你字体用sp,尺寸用dip . 可是为什么字体用sp呢?谷歌为什么要这么定呢?这两个单位之间到底有什么 ...

  2. 科普dip,dp,sp,dpi,ppi,px,Density

    一.概念 DPI:DPI是Dots Per Inch的缩写,也就是"每英寸点数",打印机分辨率.这里所说的"点",在屏幕上并不是不变的,并不是唯一对应屏幕上的像 ...

  3. New UI-常用计量单位px,dp,sp,pt解析与转换

    New UI-常用计量单位px,dp,sp,pt解析与转换            --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入 ...

  4. Android中adb push和adb install的使用区别

    在Android实际开发中,经常会使用adb命令,安装应用程序可以使用adb push 或者adb install.下面就来讲讲这两种安装方式的区别. adb push 能够指定安装目录.比如执行&q ...

  5. 【Android】dip、dp、sp、pt和px的区别

    转载自: http://www.ityoudao.com/Web/Android_657_2256.html 1.概述 过 去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素 ...

  6. android中dip、dp、px、sp和屏幕密度

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

  7. android 尺寸转换 dp sp in mm pt px转换为int

    在android开发中,在自定义view中有些函数只接受int参数,而我们经常使用的尺寸单位是dp.sp这些,那如何将它们转换为int型呢? int spToInt=TypedValue.applyD ...

  8. Android开发中dp、dpi、px的区别(转)

    基本概念 - dp:安卓中的相对大小 - dpi:(dot per inch)每英寸像素多少 - px:像素点 二.详细说明 1.px和dpi - px: 平常所说的1920×1080只是像素数量,也 ...

  9. Android中的Parcelable接口和Serializable用法和区别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

最新文章

  1. php如何删除数据库中的数据库文件夹,学习猿地-php数据库如何删除数据
  2. MyBatis-23MyBatis缓存配置【二级缓存】
  3. 自动化来势汹汹,未来的程序员该何去何从?
  4. html5中有哪些新属性,整理HTML5中表单的常用属性及新属性
  5. OpenSSL(加密方式,加密算法,自签证书)
  6. HttpSession
  7. 流程代码中js报错,在javaScript或者jQuery中字符串比较没有equals()方法
  8. 聚能聊每周精选 第二十一期
  9. 009一对一 主键关联映射_单向(one-to-one)
  10. 想了解能源互联网?看这篇就够了
  11. 什么是php递归算法_PHP递归算法(三)
  12. 如何平衡CVR预估中的延迟反馈问题?(内含招聘)
  13. java发送电子邮件
  14. 大都会人寿线下培训第三天回顾
  15. 简单实用,聊聊我常用的 4 款 Pandas 自动数据分析神器
  16. 微信小程序实战八:优惠券页面的实现
  17. Crontab中的除号(slash)到底怎么用?(转载)
  18. 5G基站: 请叫哥牛逼!
  19. 蚂蚁金服若IPO 信贷业务或将得到长远发展
  20. etc/hosts.allow和/etc/hosts.deny详解

热门文章

  1. 大数据教程(13.6)sqoop使用教程
  2. nodejs繁琐地自建路由
  3. git的一些常用命令
  4. JAVA常见算法题(三十)
  5. 钻石问题(菱形继承问题) 和虚继承
  6. BZOJ 2947 Poi2000 促销 set
  7. ThinkPHP验证码类
  8. Tivoli NetView
  9. Struts_改写客户列表练习
  10. dedecms织梦获得首字母或拼音的方法,并实现文章列表按首字母归类