针对大多数APK应用程序,开发人员都会提供各种不同的资源。比如对于同一张图片image.png,我们通常会提供高分辨率,中分辨率和低分辨率三个版本。
res/
drawable/
image.png
drawable-hdpi/
image.png
drawable-mdpi/
image.png
drawable-ldpi/
image.png
它们都必须以相同的名字存储在各个drawable目录下。当应用程序运行时,系统会根据当前设备的实际分辨率来选择最佳的资源。
那么系统运行时如何动态选择最合适的资源来使用呢?
理解最佳资源的匹配过程至少有两个好处:
- 当设计应用程序时,我们可以有针对性地提供正确的资源。
- 对于适配多种设备有重要的指导意义。
资源标签属性及优先级
理解最佳资源匹配过程之前,我们先来看一下资源标签的属性和优先级。所谓优先级顺序指的是Android规定的资源标签属性的优先级。
其实除了分辨率外,同种资源之间还可以有下面许多资源属性标签,它们在匹配过程中是有优先级顺序的。
以下资源标签修饰语按照优先级从高到低的顺序排列。
MCC和MNC
MCC(Mobile Country Code)和MNC(Mobile Network Code)是网络运营商的全球唯一编号。其中MCC指国家码,MNC指网络号。
例如,MCC-310属于美国,MCC-460属于中国。460-00代表中国移动,460-01代表中国联通。一般情况下,SIM卡中存有此卡的主归属地。
用作资源标签时,可以同时使用MCC和MNC 组合,也可以只使用MCC。例如,mcc460,mcc460-mnc00。程序编码时,可以使用Configuration类中的mcc和mnc属性来获取当前设备的这两个值。语言和地区
Android系统采用ISO 639-1国际语言码,由两个字母组成。地区代码遵循3166-1-alpha-2标准执行,也由两个字母组成,是可选的。如何组合使用需要加”r”.例如en表示英语,fr表示法语,en-rUS表示英语和美国地区。程序中可以通过Configuration类的locale属性值来获取当前设备的语言地区信息。
最小宽度(Smallest Width)
格式为
sw<N>dp
例如用res/layout-sw600dp来标志自己的布局资源,相当于告诉系统,屏幕的可显示尺寸必须在任何时刻都大于600dp(不管横屏还是竖屏)ÿ