Android怎么找到最优适配资源
当我们将一些提供了不同的资源文件可供Android系统选择的时候,Android会在运行时会根据一套适配的规则选择最符合当前配置的资源。为了说明Android怎么选择资源,假设我们有以下可选的资源文件目录,每一个目录都包含同一张图片的不同版本。
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
在将系统配置与可选的资源对比之后,Android选择drawable-en-port/
Android根据下面的逻辑去选择资源
1、排除跟系统配置不同的资源文件
drawable-fr-rCA/被排除了,因为它违背了Locale=en-GB。
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
例外:屏幕像素密度(Screen pixel density) 这种限定词不会简单地因为跟当前系统配置不同而被排除。即使当前屏幕的配置是hdpi,drawable-port-ldpi/不会被排除,因为每种屏幕密度都被认为可适配的。更多相关的信息查看Supporting Multiple Screens.
2、选出列表中(下一个)最高优先级限定词(开始于MCC,然后越往下越低)。
3、是否还有包含这个限定词的资源目录?
●否,返回步骤2然后查找下一个限定词(在例子中,答案是否,直到语言限定词被找到)。
●是,继续第4步。
4、排除没有包含这个限定词的资源文件目录。在这个例子中,系统排除了所有没有包含语言限定词的目录:
drawable/
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
例外:如果限定词是屏幕像素密度(device screen density),Android会选择最接近屏幕像素密度的一个。 总之,Android比较偏向于将原始的大图片缩放成 小的图片。 参考 Supporting Multiple Screens.
5、返回重复步骤2,3,和4知道只剩下一个目录。在这个例子中,屏幕方向是下一个用来匹配资源的限定词。所以,没有限定屏幕方向的资源文件目录就被排除了。
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
最后剩下的目录是drawable-en-port
虽然在请求每一个资源文件的时候都会执行上述的处理过程,但是系统自己会进行查找过程的优化。其中一个优化就是一旦系统的配置已经被加载,它可能会排除掉永远不会匹配的可选资源。比如,如果配置中的语言为英语(“en"),那么任何其他有语言限定词又不是英语的就会从可选的资源目录池当中排除(但是如果资源目录中没有语言限定词,那么它依然是可选的)。
当根据屏幕大小选择资源的时候,如果找不到能跟当前屏幕匹配的资源,为比当前更小的屏幕设计的资源就会被使用(比如,一个large-size屏幕将会在必要的时候使用normal-size屏幕的资源文件)。然而,如果唯一可选的资源比当前的屏幕大,系统不会使用它们并且你的程序会崩溃如果没有其他的资源能够跟系统配置匹配(比如,所有的layout资源都有xlarge的限定,但是当前的设备屏幕是normal-size的)。
注意:在准确匹配资源上,限定词的优先级(在表2)比限定词的数量更重要。例如,在上面的步骤4,列表中的最后一项还包含了三种能够准确匹配系统配置的资源(orientation、touchscreen type和input method),然而drawable-en那项只有一项匹配(语言)。然而,语言有比其他限定词更高的优先级,所以drawable-port-notouch-12key就被排除了。
本文翻译自How Android Finds the Best-matching Resource
Android怎么找到最优适配资源的更多相关文章
- Android开发者必知的开发资源
推荐书籍 我推荐下面两本书: The Busy Coder’s Guide to Android Development <The Busy Coder’s Guide to Android D ...
- (转载)Android开发者必知的开发资源
(转载)http://www.importnew.com/3988.html 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮.如果您是一位2013 ...
- Android 如何引用com.android.internal.R目录下的资源
Android 如何引用com.android.internal.R目录下的资源 项目需求 有一个资源跟系统上的一个资源相同,想要引用它:frameworks/base/core/res/res/dr ...
- Python 制作Android开发 所需的适配不同分辨率的套图
使用Python做起工具来还真是爽,简单,方便,快捷.今天忙活了一下,制作出一个比较实用的小工具. 自动化套图制作,适配不同屏幕 尤其是对于android开发来说,要适配不同屏幕就需要多套切图,那么. ...
- android imageview使用的时候 引用资源src和background的区别
android imageview使用的时候 引用资源时src和background的区别 src更强调内容并且不行拉伸图片进行适配,而background更注重引用图片,会对图片进行拉伸
- [转][赞]Android开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮.如果您是一位2013年刚刚入行的 ...
- Android 开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Androi ...
- Android 文件夹命名规范 国际化资源
Android 文件夹命名规范 国际化资源 android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values- ...
- android学习笔记40——国际化和资源自适应
国际化——Internationalization,简称I18N. 本地化——Localization,检查L10N. java国际化资源的思路: java提供国际化资源的思路,是将程序中的标签.提示 ...
随机推荐
- 一起买beta版UI测试
一起买beta版UI测试 测试目的 保证代码质量,对各个单元进行测试,可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误. UI测试 登录模块测试 登录模拟过程. 发帖模块测试 ...
- [OSI]网络间通信流程
PC 连接交换机A,组成内网.DNS Serv 和 Web Serv 连接交换机B 组成外网. 示意图: 内网通信 PC1 到 PC2: PC1 发送的数据先到交换机A,交换机A没有ARP地址缓存表, ...
- Vue组件之自定义表单组件
今天又看了一遍vue的文档,记得之前学习的时候,官方文档中有提过,v-model指令是一个语法糖,做两件事,一个是给表单控件元素绑定value,第二个是当输入时更新绑定的值,不过后来在"表单 ...
- SQL Server 大数据量分页建议方案
简单的说就是这个 select top(20) * from( select *, rowid = row_number() over(order by xxx) from tb with(noloc ...
- jquery easyui window中的datagrid,只能显示一次问题
最近项目中用到easyui 的动态创建window ,window中嵌入了datagruid.第一次打开是能显示数据,但再次打开时确没显示: 注:url已成功返回了数据. 多次查阅easyui帮助文档 ...
- ubuntu添加桌面或launcher快捷方式
以eclipse为例,自行下载的. 创建文件/usr/share/applications/eclipse-kepler.desktop 文件内容: #------------------------ ...
- 对象序列化成Json字符串 及 反序列化成对象
一. public static string JsonSerializer<T>(T t) { DataContractJsonSerializer ...
- HP iLo2 试用序列号
HP iLo2 试用序列号 2 条回复 32Q8W-GKHTR-NPDKY-5CD79-T525H hp的ilo2功能实在太有用了,不用往那个恶劣的机房跑了,系统重装也直接远程完成. 这个试用序列号用 ...
- IOS绘制渐变背景色折线图的一种尝试
1.绘制折线图 上次在群里看到一个折线图划的很漂亮,自己想实现一个这样的 ,但是一直没什么头绪,不知道怎么做,就开始在网上查找划线,绘 制渐变色这一块的内容,用最笨的方式,自己尝试的写了一些,也没 有 ...
- rabbitmq安装
1.从源码安装最新的otperlang17,版本(otp_src_17.1.tar.gz): ./configure make make install 2.有可能要安装 和simplebean ...