Android资源匹配过程(二)

上一篇文章了解了Android资源标签属性及优先级 后,下面我们来看资源的具体匹配规则。

Android资源匹配过程(二)_第1张图片

下面以一个实际例子作为说明。
假设某App中的drawable资源有如下几种选项:

  • drawable/
  • drawable-en/(英语)
  • drawable-fr-rCA/(法语和加拿大地区)
  • drawable-en-port/(竖屏)
  • drawable-en-notouch-12key/(不带触摸屏并具备12键的键盘)
  • drawable-port-ldpi/(竖屏低密度屏幕)
  • drawable-port-notouch-12key/(竖屏,不带触摸屏,12键键盘)

假设设备当前设备配置为:
Locale=en-GB
Screen orientation=port
Screen pixel density=hdpi
Touchscreen type=notouch
Primary text input method=12key

匹配过程分为两个阶段:

第一阶段:筛选掉与设备当前配置不相符的资源选项。
在淘汰过程中,对于资源选项里没有显示写出来的配置,不作为评判标准;而资源选项里显示写出来的,符合当前配置的可以通过筛选,否则直接淘汰。

特别注意,Android 明确规定,Density标签不在第一阶段的淘汰范围内。

经过筛选,结果如下:

drawable/
drawable-en/
drawable-fr-rCA/(淘汰
drawable-en-port/(竖屏)
drawable-en-notouch-12key/
drawable-port-ldpi/(作为特例保留下来
drawable-port-notouch-12key/

第二阶段:选择最优解
经过第一阶段筛选后,剩余的选项都是完全符合设备当前配置要求的(除了特列外)。第二阶段的主要任务就是在剩下的资源选项中按照优先级顺序筛选出一个最优的选项。

第一步,先选择MCC,MNC来考察,发现没有选项包含这个标签。
第二步,继续选择语言与地区标签。由于当前配置是en-GB,所以没有带这个标签的选项被排除。

经过筛选,结果如下:

drawable/(淘汰)
drawable-en/
drawable-fr-rCA/(淘汰)
drawable-en-port/(竖屏)
drawable-en-notouch-12key/
drawable-port-ldpi/(淘汰)
drawable-port-notouch-12key/(淘汰)

接下来的步骤中我们重复利用这一规则,直到筛选出符合条件的选项。此例中,最终只剩下如下选项:

  • drawable-en-port/(最终匹配成功)

注意:应用使用的每种资源类型时候,需要提供默认资源。这里的默认资源指未标记配置限定符的资源。例如,drawable/ 中的资源是默认可绘制资源。

参考:
Android资源管理框架(Asset Manager)简要介绍和学习计划

你可能感兴趣的:(Android资源匹配过程(二))