8.1.2 应用资源的适配
Android系统支持的移动设备多种多样,不同设备的软硬件环境大相径庭,这就要求运行在Android中的每个应用都能够适应多样的设备环境。
比如,不同设备的屏幕尺寸和分辨率都有所不同,分辨率高的需要大尺寸的图标,而分辨率低的,仅需要较小尺寸的图标;不同的应用使用了高版本SDK提供的API,这就需要运行在能支持高版本SDK的设备上,而安装了低版本SDK的设备则可能无法运行。
传统的解决策略,是为不同的软硬件设备编译多个版本的应用,用户可以根据设备的型号和运行的版本进行选择。采用这样的策略,不仅会大大提升应用维护、升级、编译、部署和发布的复杂性,而且更重要的,它还会给用户获取应用增加难度,导致潜在的用户流失。
而在Android中,利用应用资源的可适配性,可以有效地解决适配软硬件环境的问题。上一小节介绍了Android应用资源的目录结构,如表8-1所示,每个资源目录(或者目录中特定的列表型资源文件)都用来存放特定类型的资源信息,同时,还可以为各个资源目录添加对应的适配资源目录,用来存放可替换的资源文件,以适配不同的软硬件环境。
适配资源目录的命名格式,是在原有的资源目录的基础上增加适配项,多个适配项通过中划线隔离开来,格式形如:
资源目录-适配项1-适配项2-…
比如,如果应用中需要为高分辨率的设备提供专属的图标,可以放置在drawable-hdpi目录中,当应用运行在高分辨率设备中时,会优先从drawable-hdpi中挑选图标替换默认资源目录中的图标。
在实际开发中,最常用的配置项往往与本地化(Localization)或者界面适配相关。以Android原生的联系人应用为例,作为一款随系统发布的原生应用,它需要能够适应各种不同的语言和设备环境。
在实践中,联系人应用使用适配项来实现本地化相关资源的定义:
联系人应用中对values资源目录进行本地化适配
values#默认语言
values-zh-rCN#简体中文
values-zh-rTW#繁体中文
values-en-rUS#美国英文
values-er-rUS#美国西班牙文
values-fr
法语
…
同时,联系人应用使用适配项对不同屏幕尺寸的界面进行定制:
联系人应用中对layout资源目录进行界面相关适配
layout#默认界面样式
layout-sw580dp#最小宽度大于580dp的设备界面样式(可能是5寸平板)
layout-sw680dp-w1000dp#最小宽度大于680dp,当前宽度大于1000dp(当前宽度与屏幕转向
相关)的设备样式(可能是大尺寸平板)
layout-land#横屏时的界面样式
…
此外,联系人应用也为不同分辨率的设备定制了不同的图片信息:
联系人应用中对drawable资源目录进行界面相关适配
drawable#默认图像
drawable-mdpi#较小尺寸屏幕使用的图像
drawable-sw580dp-hdpi#最小宽度大于580dp的大屏幕使用的图像
drawable-xhdpi#高清屏幕使用的图像
…
通过联系人应用的实践可以学习到,一款需要运行在不同设备上的应用,需要如何通过适配项精心地为每类设备定制不同界面和资源。Android中的适配项种类和值都在不断地变化,需要不断地关注SDK文档[1],了解和使用新的适配项。
[1]具体的资源适配项定义,可以参见SDK文档:http://developer.android.com/guide/topics/resources/providing-resources.html#table2。