屏幕分辨率:在x y轴上的像素点数。单位是px,1px=1个像素点。一般以    纵向像素×横向像素    表示,如1920*1080
dpi--------------------------每英寸上的像素点数(斜角的px数目 ÷ 斜角的inch数目),dot per inch的缩写,与屏幕尺寸和屏幕分辨率有关。

以三星C9 pro为例,官方参数为1920×1080,屏幕尺寸4.95 inch 是屏幕对角线长度,

(1920+108021/2/ 4.95inch = 445dpi

px--------------------------像素,构成图像的最小单位。

1px代表屏幕上一个物理的像素点;px单位不建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,

但是偶尔用到px的情况,是需要画1像素表格线或阴影线的时候,用其他单位如dp会显得模糊。

dp==dip ------------------密度无关像素,Density Independent Pixels的缩写,设备不依赖像素的一个单位

dp是为了使开发者设置的长度能根据不同屏幕(分辨率/英寸也就是dpi)获得不同的像素(px)数量。如:将控件设长度为1dp,那么在160dpi的屏幕上该控件长度为1px,在240dpi的屏幕上该控件的长度为1*240/160=1.5个像素点。也就是dp会随着不同屏幕而改变控件长度的像素数量。

dp的官方叙述:当屏幕每英寸有160个像素时(也就是160dpi),dp与px等价的。那如果每英寸240个像素呢?1dp—>1*240/160=1.5px,即1dp与1.5px等价了。
     其实记住一点,dp最终都要化为像素数量来衡量大小的,因为只有像素数量最直观。

如果Android手机每英寸有160px,即手机是160dpi,那么此时1dp就可以理解为1px,假如现在手机是240dpi,那么1dp=240/160 px=1.5px

一个手机屏幕最大有多大的dp呢,我能不能设置成1亿dp呢?如现在将控件宽度设置为160dp,那不同dpi的手机所得到的像素是多少呢?

sp --------------------------Scale-Independent Pixels,可以根据文字大小首选项进行放缩,常用于设置字体大小。最好使用12sp大小以上的尺寸,推荐使用12sp、14sp、18sp、22sp,尽量避免使用奇数或小数,因为容易造成精 度的丢失。与缩放无关的抽象像素,sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

应用实例

Drawable之getIntrinsicWidth()和getIntrinsicHeight()
Drawable--------------A Drawable is a general abstraction for "something that can be drawn."
      getIntrinsicWidth()和getIntrinsicHeight(),顾名思义他们是用来取得Drawable的固有的宽度和高度。那么问题就来了:我们有时候通过这两个方法取到的宽和高和实际的并不一样,怎么回事?
      在assets中放了了一张png图片,它的分辨率是807x1211,然后通过Drawable.createFromStream(is, null)生成一个Drawable对象,最后利用上面的两个方法取drawable对象的宽高,居然结果是404x606。这是怎么回事呢?
      Drawable这个类是对所有可以画的东西的抽象,他可以是一张图片,也可以是实体的颜色,线等等,我们不能简单的认为它是一张图片。
      测试Android机器320dpi,按照上面的介绍1dp = 320 / 160  px 。

所以上面两个方法的单位应该是dp,因为 807 px ÷(320 / 160)=403.5   1211px  ÷(320 / 160)=605.5

现在明白了吧,getIntrinsicWidth()和getIntrinsicHeight()返回的宽高应该是dp为单位的。


本文结束

Android dp、dip、dpi、px、sp简介及相关换算,及其应用实例的更多相关文章

  1. 关于dp dip dpi px

    在Android开发中,屏幕适配是一件非常让人头疼的事情.有时候在这个机型上调试的漂漂亮亮的UI界面,换一部手机就丑的不忍直视.但为了我们软件更好的用户体验,我们必须适应Android市场上形形色色的 ...

  2. dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

    一.基本概念 dip        : Density independent pixels ,设备无关像素. dp        :就是dip px        : 像素 dpi       :d ...

  3. 01安卓像素 dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

    一.基本概念 dip        : Density independent pixels ,设备无关像素. dp        :就是dip px        : 像素 dpi       :d ...

  4. mobile app & ppi & dpi & px

    mobile app & ppi & dpi & px How do dp, dip, dpi, ppi, pixels and inches relate? https:// ...

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

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

  6. Android上dip、dp、px、sp等单位说明(转)

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

  7. Android度量单位说明(DIP,DP,PX,SP) (转帖)

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

  8. Android上dip、dp、px、sp等单位说明

    Android上dip.dp.px.sp等单位说明 dip  device independent pixels(设备独立像素). 不同设备不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA ...

  9. Android中dip、dp、sp、pt和px的区别

    1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小.在有些情况 ...

随机推荐

  1. Ubuntu下将python从2.7升级到3.5

    在ubuntu 的终端中用代码下载最新的Python sudo apt-get install python3 系统会提示输入Linux 的密码,输入密码后下载 刚才下载的Python程序被安装在us ...

  2. 机器学习基础:(Python)训练集测试集分割与交叉验证

    在上一篇关于Python中的线性回归的文章之后,我想再写一篇关于训练测试分割和交叉验证的文章.在数据科学和数据分析领域中,这两个概念经常被用作防止或最小化过度拟合的工具.我会解释当使用统计模型时,通常 ...

  3. 一个案例彻底弄懂如何正确使用 mysql inndb 联合索引

    有一个业务是查询最新审核的5条数据 SELECT `id`, `title` FROM `th_content` WHERE `audit_time` < 1541984478 AND `sta ...

  4. html5入门:教你用canvas写一个时钟

    今天的时间比较充裕,心血来潮,为大家分享一个html5的小例子,希望对刚学html5或者是没学html5正准备学的“童鞋们”展示一个小案例,希望对你们的学习有帮助!高手嘛!请跳过吧! 好了,闲话少数, ...

  5. [转]rancher 初步

    本文转自:https://blog.csdn.net/weixin_41709748/article/details/81515780 什么是 rancher Rancher是一个开源的企业级全栈化容 ...

  6. 从零开始学安全(十一)●IP地址

    127 都是本机地址 ip  DE 类网段 都是广播网段 它并不指向特定的网络 用不上

  7. Linux-bg和fg命令(19)

    使用ctrl+z将程序挂在后台: jobs 查看后台的命令: fg(fore go) 将后台的命令,放置前台(fore)继续执行,比如:fg 2     //等价于vi 2.txt bg(back g ...

  8. struts2_struts2线程安全吗?

    线程安全:在一个进程中有多个线程并发执行,线程执行过程中,变量值是相同的,执行结果也是相同的 struts2线程安全 1.每次请求都会重新创建新的action对象,所以线程安全. 2.由于action ...

  9. netty入门demo(一)

    目录 前言 正文 代码部分 服务端 客服端 测试结果一: 解决粘包,拆包的问题 总结 前言 最近做一个项目: 大概需求: 多个温度传感器不断向java服务发送温度数据,该传感器采用socket发送数据 ...

  10. 三问助你Fundebug

    译者按: Debug也要三省吾身! 原文: Three Questions About Each Bug You Find 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版 ...