资讯专栏INFORMATION COLUMN

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

JiaXinYi / 3487人阅读

摘要:一般以纵向像素横向像素表示,如每英寸上的像素点数斜角的数目斜角的数目,的缩写,与屏幕尺寸和屏幕分辨率有关。以三星为例,官方参数为,屏幕尺寸是屏幕对角线长度,像素,构成图像的最小单位。

屏幕分辨率:在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为单位的。

 


本文结束

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2724.html

相关文章

  • Android屏幕适配方案

    摘要:下图为图标的各个屏幕密度的对应尺寸屏幕密度图标尺寸解析解析获取屏幕分辨率信息的三种方法第一种第二种第三种屏幕适配出现的原因什么是像素点屏幕分辨率是指在横纵向上的像素点数,单位是,个像素点。 目录介绍 1.屏幕适配定义 2.相关重要的概念 2.1 屏幕尺寸[物理尺寸] 2.2 屏幕分辨率[px] 2.3 屏幕像素密度[dpi] 2.4 dp、dip、dpi、sp、px 2.5 md...

    Sourcelink 评论0 收藏0
  • Android屏幕适配方案

    摘要:下图为图标的各个屏幕密度的对应尺寸屏幕密度图标尺寸解析解析获取屏幕分辨率信息的三种方法第一种第二种第三种屏幕适配出现的原因什么是像素点屏幕分辨率是指在横纵向上的像素点数,单位是,个像素点。 目录介绍 1.屏幕适配定义 2.相关重要的概念 2.1 屏幕尺寸[物理尺寸] 2.2 屏幕分辨率[px] 2.3 屏幕像素密度[dpi] 2.4 dp、dip、dpi、sp、px 2.5 md...

    XboxYan 评论0 收藏0
  • Android 手机屏幕那些事儿

    摘要:最近公司的设备准备进行硬件升级,谈及屏幕时,大家对于相关的一些知识点具有不同的认知。因此我搜集了互联网上关于手机屏幕的相关资料,总结记录分享于此。屏幕材质相关信息主要使用案例三星第一代屏幕三星第二代屏幕,色彩饱和度高,显示艳丽。 最近公司的 Android 设备准备进行硬件升级,谈及屏幕时,大家对于相关的一些知识点具有不同的认知。因此我搜集了互联网上关于 Android 手机屏幕的相关...

    Baoyuan 评论0 收藏0
  • 屏幕适配全方位解析

    摘要:需要注意的是,这种通过限定符分辨屏幕尺寸的方法,适用于之前。这种最小宽度限定符适用于之后,所以如果要适配全部的版本,就要使用限定符和文件同时存在于项目目录下。 1.屏幕适配概念 而随着支持Android系统的设备(手机、平板、电视、手表)的增多,设备碎片化、品牌碎片化、系统碎片化、传感器碎片化和屏幕碎片化的程度也在不断地加深。而我们今天要探讨的,则是对我们开发影响比较大的——屏幕的碎片...

    loonggg 评论0 收藏0
  • 屏幕适配全方位解析

    摘要:需要注意的是,这种通过限定符分辨屏幕尺寸的方法,适用于之前。这种最小宽度限定符适用于之后,所以如果要适配全部的版本,就要使用限定符和文件同时存在于项目目录下。 1.屏幕适配概念 而随着支持Android系统的设备(手机、平板、电视、手表)的增多,设备碎片化、品牌碎片化、系统碎片化、传感器碎片化和屏幕碎片化的程度也在不断地加深。而我们今天要探讨的,则是对我们开发影响比较大的——屏幕的碎片...

    mochixuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<