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

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/这个资源目录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值