您的位置:首页 > 移动开发 > Android开发

Android应用程序的资源选择规则

2015-10-26 16:19 316 查看
Android应用程序的资源选择的规则一共有18种,如图:



该图的信息来自于官方文档,具体可参考:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources。这18个规则是按照优先级从最大到小排列的,通过这些匹配规则,应用程序就能选择最佳的资源目录。

在应用程序中我们可以根据这些规则来命名资源目录的名称,例如:drawable-port-hdpi。这里要注意几点:第一,这18个规则是有优先级的,所以如果上面的例子写成drawable-hdpi-port就会出问题;第二,资源目录是不允许嵌套的,诸如res/drawable/drawable-en/形式的资源目录都是不行的;第三,同一规则只能出现一次,诸如drawable-xhdpi-hdpi的命名是不允许的。

上面所说的注意点其实和Android的匹配算法有关系,图2是官方给出的匹配算法,



下面用官方的例子来说明下这个算法,详细内容可以参考http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch

drawable/

drawable-en/

drawable-fr-rCA/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

运行该程序的设备信息如下

Locale = en-GB

Screen orientation = port

Screen pixel density = hdpi

Touchscreen type = notouch

Primary text input method = 12key

根据图2的算法,一共分5步,

1.首先排除与设备信息矛盾不符的目录,即:

drawable/

drawable-en/

drawable-fr-rCA/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

2.按照这18个规则的优先级,从MCC and MNC开始进行2~4步骤的筛选第一步筛选剩下的目录

3. 看在第二步中选择的规则有没有匹配到文件夹,如果有,就执行第四步;如果没有就返回执行第二步,即切换到下一个优先级的规。。在这个例子中,MCC and MNC没有匹配到任何文件夹,所以返回第二步,切换到第二个规则Language and region进行筛选

4.去除那些不含有第二步规则的资源目录,即:

drawable/

drawable-en/

drawable-en-port/

drawable-en-notouch-12key/

drawable-port-ldpi/

drawable-port-notouch-12key/

5.继续执行2~4,直到找到一个最匹配的资源目录为止,即剩下最后一个目录。这个例子中,匹配screen orienation时,由于设备的screen orienation为port,因此,所有不包含有port资源目录将被去除,即:

drawable-en/

drawable-en-port/

drawable-en-notouch-12key/

所以最终会选择drawable-en-port/这个资源目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android