Android应用程序的资源选择规则
2015-10-26 16:19
316 查看
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/这个资源目录。
该图的信息来自于官方文档,具体可参考: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/这个资源目录。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories