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

Android资源匹配算法

2014-04-30 15:46 453 查看
新书上市《深入解析Android 5.0系统》
以下内容节选自本书

当某种资源存在多个候选资源目录时,需要通过一种方式来找到最合适的资源。在Android的网站上提供了资源匹配的算法说明,让我们一起来学习。

下面我们通过一个实际的例子来学习这个算法的执行过程。假设res目录下存在着下列资源目录:
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
同时假设有一台设备的配置如下:
Locale =en-GB
Screenorientation = port
Screenpixel density = hdpi
Touchscreen type = notouch
Primarytext input method = 12key
通过算法筛选后,最终使用的资源目录是:
drawable-en-port
.
系统进行选择依据的是下面的流程图演示的算法。我们依据这个算法来看看上面这个例子是如何得到最终的结果的。



第一步:去掉和系统配置冲突的项。
上面的例子中有两项冲突:
目录“drawable-fr-rCA/”
和配置“Locale = en-GB”冲突;目录“drawable-port-ldpi/”和配置“Screen
pixel density= hdpi”冲突。但是在配置限度符表里讲过,对于DPI类的限定符,并不要求资源项和它精确匹配,所以这里第一次不能去掉“drawable-port-ldpi/”。
第二步:按顺序逐项检查配置限度符表,看是否有限定符存在于资源目录名中,如果存在,则去掉没有该限定符的目录。
1. MCC-MNC项没有,继续
2. 语言项en存在,所以要去掉下面三项:
drawable/
drawable-port-ldpi/
drawable-port-notouch-12key/
然后只剩下三项了:
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
接下来,一直到“屏幕方向”才又找到匹配的限定符“port”。上面三项去掉不含“port”的两项。最后就只剩下“drawable-en-port/”。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: