Android dpi dp ppi概念

news/2024/10/23 7:22:37/

转自: http://www.jianshu.com/p/913943d25829 

Android的碎片化已经被喷了好多年,随着国内手机厂商的崛起,碎片化也越来越严重,根据OpenSignal的最新调查,2014年市面上有18796种不同的Android设备,作为开发者,一个无法回避的难题就是需要适配各种各样奇奇怪怪的机型。

设备机型不同必然也会导致屏幕大小和分辨率(Resolution)的不同,但是无论分辨率有多大,屏幕有多大,我们手指触控范围的大小不会发生变化,所以最优的适配方式应该是指定大小的控件在所有的设备上的显示都一样

Android的官方文档对此也有明确的说明

When adding support for multiple screens, applications do not work directly with resolution; applications should be concerned only with screen size and density, as specified by the generalized size and density groups.

所以,适配应该与分辨率无关,只与屏幕大小和屏幕密度相关,首先来看一下什么是屏幕密度 - DPI。

DPI

DPI的全称是 Dots Per Inch,Inch是一个物理单位(无论在任何设备上,其大小都是固定的),所以DPI就指在一个Inch的物理长度内有多少个Dot,160DPI的屏幕就表示一个Inch包含160个Dot,320DPI的屏幕表示一个Inch有320个Dot,所以说Dot的大小是不固定的。

Android设备用DPI来表示屏幕密度(Density),屏幕密度大就表示一个Inch包含的Dot比较多。那PPI是什么呢?
我们会经常看到iPad、iPhone是用PPI来表示屏幕密度,小米Pad也是用PPI来表示。


PPI in mi pad

其实对Android而言,DPI等价于PPI(Pixels-Per-Inch),DPI最早是用于印刷行业,跟PPI还是有本质不同的,Android应该是误用了DPI这个概念。具体可以参考PPI vs. DPI: what’s the difference?。

其实我们只要知道在Android设备中,DPI 等价于 PPI 就可以了。


PPI 定义

通常我们说一个设备是多少寸时,指的是屏幕对角线(Diagonal)是多少inch,所以用对角线的像素值(px)除以对角线长度(inch),就可以计算出PPI。


PPI 计算公式

为了简化适配工作,Android根据屏幕大小(Inch)和屏幕密度(DPI)对设备做了如下划分:


PPI 对应屏幕尺寸

DP

既然有那么多不同分辨率、不同大小的屏幕,使用PX必然会导致适配困难,为了进一步简化适配工作,Android为我们提供了一个虚拟的像素单位 - DP 或者 DIP (Density-Independent pixel),当然也可以理解为 Device-Independent Pixel。为什么说是虚拟呢,因为它的大小不是一个物理(Phisical)值,而是由操作系统根据屏幕大小和密度动态渲染出来的。

PX跟DP之间的换算关系很简单

px = dp * (dpi / 160)

举例来说,小米Pad的屏幕密度为326dpi,如果需要显示的图片大小为20dp,那么就需要提供一个 20 (326 / 160) = 40px的图片才能达到最佳显示效果,如果还要适配一个163dpi的屏幕,那么还需要再提供一个20 (163 / 160) = 20px的图片。

那么一个20dp的图片,在不同设备上的显示效果如何呢?我们以iPad为例来说明。


iPad 屏幕参数

iPad2 和 iPad Retina的物理尺寸都是 9.7 inch,不同的是分辨率和PPI,一个是1024x768 / 132ppi,另一个是2048x1536 / 264ppi,

分别计算一下20dp对应多少inch

ipad2 = 20 * (132 / 160) * (7.9 / (math.sqrt(1024 * 1024 + 768 * 768))) 
ipad_retina = 20 * (264 / 160) * (7.9 / (math.sqrt(2048 * 2048 + 1536 * 1536)))

计算结果都是0.1018359375,这就是dp的功能,它能保证在所有的设备上显示的大小都一样。

如果只提供了一个大小为20px的图片,为了保证图片在所有设备上的物理大小都一样,高DPI的设备上系统会拉伸图片,低DPI的设备上图片会被缩小,这样既会影响UE也会影响APP的执行效率。所以我们需要为不同屏幕密度的设备提供不同的图片,他们之间的对应关系如下。


Android 设备屏幕分级

我们在用Sketch作图的时候,如果1x图片对应的是屏幕是MDPI (160dpi),那么1.5x,2x就分别对应HDPI,XHDPI。


screens_densities

SP

SP 全称是 Scale-independent Pixels,用于字体大小,其概念与DP是一致的,也是为了保持设备无关。因为Android用户可以根据喜好来调整字体大小,所以要使用sp来表示字体大小。


changing_android_font_size

参考文献

  1. http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts
  2. http://developer.android.com/training/multiscreen/screendensities.html
  3. http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android
  4. http://99designs.com/designer-blog/2013/02/26/ppi-vs-dpi-whats-the-difference/


http://www.ppmy.cn/news/353887.html

相关文章

Android开发中dpi和ppi的理解

一,澄清一些误区 1.1概念 dpi是dot per inch,每英寸多少点,针对的是印刷页即打印到纸上或者应用到ui切的图片中; ppi是 Pixel per inch,每英寸像素数,针对的是手机屏幕; 1.2误区 网上有dpi…

Android dp px ppi pt等概念的理解

做Android开发过程中,总会用到px、dp、pt等概念,下面对它们代表的意义以及互相之间的关系做简单的介绍。 目录 1、px 2、ppi 3、pt 4、dp 5、Android获取屏幕状态信息 1、px 像素 就是一个颜色点,一个像素点,最小的单位。不同…

颜色的前世今生19·外传之PPI、LPI、DPI疑难问题解答

专门开一篇,解答以下若干问题: 问题1:为什么电脑显示的标准是72PPI?而印刷品的标准是150LPI?忽略单位的不同,单看数值,为啥差了这么多?! 问题2:现在的手机PPI…

android 360 ppi,360特供 vs 小米手机性能大比拼!

标签:小米手机(89) 盛夏来临,与炎热的天气保持同样热度的,是360即将发售的特供手机。6月12日,360第二款特供机AK47(阿卡47)揭开面纱,凭借高配置和1699元的低价格,吸引了足够的眼球。今天,小编率…

android dp px sp 设计稿 分辨率,DPI/PPI/dp/sp/px/pt 移动设计手册

做移动设计的同学,不管是原生app或者web app,应该对字体字号都是很头痛的问题。根本原因是,我们用唯一分辨率的电脑,设计各个不同尺寸大小分辨率的设备,那简直要疯掉了。 但不要着急,我们先来理解一下一些名…

android全面屏像素密度,手机屏幕分辨率、PPI像素密度科普知识大全

手机屏幕分辨率、PPI像素密度科普知识大全 【PPi指数】是手机清晰度的重要决定因素,所谓的PPI即每英寸所拥有的像素数目。现在市售的大屏幕手机普遍分辨率都只停留在854*480的水平,同样的分辨率,屏幕越大,像素点之间的距离越大,屏幕就越粗糙。所以大屏幕也不一定能带来良好…

android全面屏像素密度,屏幕像素密度超400ppi,让你感受视觉的极限

对于一部手机,屏幕是用户与手机交互最方便、最有效、最直接的平台,也是信息显示的窗口。而窗口的配置表现如何,会直接影响到用户的观感和操作体验,在屏幕众多考量数据中,除了尺寸、屏占比之外,还有一项非常…

老板对员工很客气,对主管却很不客气

一员工午睡的时候睡过头了,老板刚好经过,轻轻地拍了拍他的肩膀说: “工作辛苦了,多注意身体,晚上加班别加班太晚。”老板回到办公室后,把员工的主管叫到办公室训了一顿,你是怎么带团队的?再出现…