Android资源匹配算法

新书上市《深入解析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.

系统进行选择依据的是下面的流程图演示的算法。我们依据这个算法来看看上面这个例子是如何得到最终的结果的。

Android资源匹配算法

第一步:去掉和系统配置冲突的项。

上面的例子中有两项冲突:

目录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/ ”。


你可能感兴趣的:(Android资源匹配算法)