Android上的PPI处理

本文摘取至:DPI、PPI、Retina、分辨率、4K、DP、PT、SP详解

Android平台的设备种类比iOS多,因为任何OEM都可以生产设备并且几乎没有比例的限制,然后加上自己版本号。结果就是生产出几乎无限制的屏幕大小和DPI种类,电话和平板电脑一样大,或者电话和平板电脑一样小的情况比比皆是。为此,你的设计总是需要做适配。

在这个部分,我们将采用不同于iOS的方法,我们先来讨论下像素比和DPI分类。

Android设备可以分为两类:手机和平板电脑。这两种设备又可以按照不同DPI分为:ldpi、mdpi、 tvdpi、 hdpi、 xhdpi、 xxhdpi和xxxhdpi。

幸好,有些比其他使用得更加频繁,有些甚至已经弃用了。

首先我们要找到等价于iOS上1x的基础单位。在Android上,这个基础单位就是MDPI。

让我们看看下面列表的像素比。

dpi、ppi

是的,很多,而且还没有完,还有一个落下了。

dpi、ppi

实际上,目前正在使用的DPI有4个:MDPI, HDPI, XHDPI和XXHDPI。 LDPI是过时的DPI,现在已经不再使用,TVDPI是TV UI的特殊例子,在2012年版的Nexus 7中短暂使用过,在手机和平板电脑的使用中没有考虑的必要。尽管如此,TVDPI的像素比(1.33x)还是被用在一些安卓系统的设备上,像是LG G手表,我们后面来讨论这个。

让我们结合带着各自DPI的Android手机和平板电脑全面客观地看待事物。

LDPIMDPITVDPIHDPIXHDPIXXHDPIXXXHDPI

 

也许在现在这个时候有一个设备使用XXXHDPI的实际app资源,但也不是很常见。如果你能用额外时间生产XXXHDPI资源,你的app便不会过时。

引入资源,chrome为例

每次请求资源都需要传递一组4张图片,从MDPI到XXHDPI,无需考虑LDPI。注意,在下面的chrome版本中,TVDPI的输入在这个例子里的5张图片里也很清楚。

和iOS一样,我建议把100%或者1x的像素比作为你设计的基础,这会让设计在适配其他像素比的时候容易一点,特别是在像素比为1.33和1.5的安卓系统上。

看看下面安卓上chrome的返回按钮的例子。

dpi、ppi

 

DPI后面跟着的建议名称不是安卓官方指南强制要求的,这是我们为资源取名的方式,因为现在有限的设计工具很难给每个资源定义一个路径。 考虑到一个资源有时有上百个资源文件,站在设计师的角度来说这是使输出过程不那么痛苦以及避免重命名错误的一个途径。资源在资源仓库里面的存储方式是有结构的,参考后面:

  • drawable-mdpi/asset.png
  • drawable-hdpi/asset.png
  • etc…

如你所见,资源被截成了3232dp的正方形,Android像素比也会是小数。当用1.33或者1.5乘以一个数的时候,最后的结果很有可能就是小数。在这种情况下你需要通过四舍五入来让数字变得有效。在这个例子中,321.33=42.56所以四舍五入之后是43px。

你需要注意以像素为单位的元素,比如笔画。你需要确保你的笔画既不是1px宽也不是2px同时也不像屏幕分辨率部分描述的那样模糊。

附加, Android规则集:

  • Android有7种不同的DPI,你需要关注其中的4个:mdpi,hdpi,xhdpi,xxhdpi,如果希望你的app面向未来,可以关注XXXHDPI。
  • MDPI是基础的DPI或者1x像素比
  • Android使用dp代替pt当作参数规格,但是他们是一样的。
  • 用你最好的判断来处理小数像素比。
  • 传递.png格式图片。
  • 确保检验命名约定,与执行负责人共同完成输出进程。

本文摘取至:DPI、PPI、Retina、分辨率、4K、DP、PT、SP详解