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

Android应用程序的资源选择的规则一共有18种,如图1:

图1

具体可参考: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是官方给出的匹配算法,

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • android res 资源匹配目录 、 drawable与 mipmap的区别 在res目录下,有各种各样的资源...
    chendroid阅读 10,869评论 0 8
  • 概述 对于Android中的应用资源,例如图像、字符串、布局、颜色等,最好是在res文件夹中定义,而不是在代码中定...
    CP9阅读 6,902评论 1 2
  • 我算得上是一个喜欢音乐的人,每天除了定时定量运动,几乎每天都要听歌。曾一度认为,生活中没有音乐,可让人怎么活。各式...
    岛屿书阅读 2,915评论 6 4
  • 室友和男友每两天就会吵一架,久而久之我们都习惯了,两个人是异地恋,他不放心,她嫌他管得太严,以前我也觉...
    离雨阅读 2,286评论 0 0
  • 孩子高考完了,看桐儿在数学的考试感觉不好以外,语文,文综,英语感觉还好,我心里很欣慰,孩子应心了,分数多少无所谓!
    b4bc3677bd8a阅读 1,417评论 0 0