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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值