Android应用程序资源可以分为两大类,分别是assets和res:
1. assets。 assets类资源放在工程根目录的assets子目录下,它里面保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在 apk文件中。如果我们要在程序中访问这些文件,那么就需要指定文件名来访问。例如,假设在assets目录下有一个名称为filename的文件,那么 就可以使用以下代码来访问它:
- AssetManager am= getAssets();
- InputStream is = assset.open("filename");
2. res。res类资源放在工程根目录的res子目录下,它里面保存的文件大多数都会被编译,并且都会被赋予资源ID。这样我们就可以在程序中通过ID来访问res类的资源。res类资源按照不同的用途可以进一步划分为以下9种子类型:
--animator。这类资源以XML文件保存在res/animator目录下,用来描述属性动画。属性动画通过改变对象的属性来实现动画效果,例如,通过不断地修改对象的坐标值来实现对象移动动画,又如,通过不断地修改对象的Alpha通道值来实现对象的渐变效果。
--anim。 这类资源以XML文件保存在res/anim目录下,用来描述补间动画。补间动画和属性动画不同,它不是通过修改对象的属性来实现,而是在对象的原来形状 或者位置的基础上实现一个变换来得到的,例如,对对象施加一个旋转变换,就可以获得一个旋转动画,又如,对对象实施一个缩放变换,就可以获得一个缩放动 画。从数学上来讲,就是在对象的原来形状或者位置的基础上施加一个变换矩阵来实现动画效果。注意,在动画的执行过程中,对象的属性是始终保持不变的,我们 看到的只不过是它的一个变形副本。
--color。这类资源以 XML文件保存在res/color目录下,用描述对象颜色状态选择子。例如,我们可以定义一个选择子,规定一个对象在不同状态下显示不同的颜色。对象的 状态可以划分为pressed、focused、selected、checkable、checked、enabled和window_focused 等7种。
--drawable。这类资源以XML或者Bitmap 文件保存在res/drawable目录下,用来描述可绘制对象。例如,我们可以在里面放置一些图片(.png, .9.png, .jpg, .gif),来作为程序界面视图的背景图。注意,保存在这个目录中的Bitmap文件在打包的过程中,可能会被优化的。例如,一个不需要多于256色的真 彩色PNG文件可能会被转换成一个只有8位调色板的PNG面板,这样就可以无损地压缩图片,以减少图片所占用的内存资源。
--layout。这类资源以XML文件保存在res/layout目录下,用来描述应用程序界面布局。
--menu。这类资源以XML文件保存在res/menu目录下,用来描述应用程序菜单,例如,Options Menu、Context Menu和Sub Menu。
--raw。 这类资源以任意格式的文件保存在res/raw目录下,它们和assets类资源一样,都是原装不动地打包在apk文件中的,不过它们会被赋予资源ID, 这样我们就可以在程序中通过ID来访问它们。例如,假设在res/raw目录下有一个名称为filename的文件,并且它在编译的过程,被赋予的资源 ID为R.raw.filename,那么就可以使用以下代码来访问它:
- Resources res = getResources();
- InputStream is = res .openRawResource(R.raw.filename);
--values。这类资源以XML文件保存在res/values目录下,用来描述一些简单值, 例如,数组、颜色、尺寸、字符串和样式值等,一般来说,这六种不同的值分别保存在名称为arrays.xml、colors.xml、 dimens.xml、strings.xml和styles.xml文件中。
--xml。这类资源以XML文件保存在res/xml目录下,一般就是用来描述应用程序的配置信息。
注意,上述9种类型的资源文件,除了raw类型资源,以及Bitmap文件的drawable类型资源之外,其它的资源文件均为文本格式的XML文件,它 们在打包的过程中,会被编译成二进制格式的XML文件。这些二进制格式的XML文件分别有一个字符串资源池,用来保存文件中引用到的每一个字符串,包括 XML元素标签、属性名称、属性值,以及其它的一切文本值所使用到的字符串。这样原来在文本格式的XML文件中的每一个放置字符串的地方在二进制格式的 XML文件中都被替换成一个索引到字符串资源池的整数值。这样做有两个好处:
A. 文件占用更小。例如,假设在原来的文本格式的XML文件中,有四个地方使用的都是同一个字符串,那么在最终编译出来的二进制格式的XML文件中,字符串资源池只有一份字符串值,而引用它的四个地方只占用一个整数值。
B. 解析速度更快。由于在二进制格式的XML文件中,所有的XML元素标签和属性等值都是使用整数来描述的,因此,在解析的过程中,就不再需要进行字符串解析,这样就可以提高解析速度。
还有另外一个地方需要注意的是,每一个res资源在编译的打包完成之后,都会被分配一个资源ID,这些资源ID被终会被定义为Java常量值,保存在一个 R.java文件中,与应用程序的其它源文件一起被编译到程序中,这样我们就可以在程序或者资源文件中通过这些ID常量来访问指定的资源。
我们接下来再看应用程序资源的组织。应用程序资源的组织方式有18个维度,如图1所示:
图1 应用程序资源的组织方式
注意,图1的表格是来自于官方文档的,它的详细描述可以参考:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources。这里有一点需要说明的是,表格中的18个维度是按照优先级从最大到小排列的,这个优先级次序可以帮助系统根据机器的本地配置来在应用程序资源目录中找到最合适的资源来使用。
具体来说,Android资源管理框架按照图2所示的算法流程来在应用程序资源目录中选择最合适的资源:
图2 应用程序资源的匹配算法
注意,图2的算法流程图是来自于官方文档的,它的详细描述可以参考:http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch。我们同样是通过上述官方文档中的例子来说明上述应用程序资源匹配算法的执行过程。
假设一个应用程序的drawable资源按照以下方式来组织:
- 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所示的算法,Android资源管理框架按照以下步骤来选择一个drawable资源:
Step 1. 消除与设备配置冲突的drawable目录,即drawable-fr-rCA目录,因为设备设置的语言是en-GB。
- drawable/
- drawable-en/
- drawable-en-port/
- drawable-en-notouch-12key/
- drawable-port-ldpi/
- drawable-port-notouch-12key/
Step 2. 从MMC开始,选择一个资源组织维度来过渡从Step 1筛选后剩下来的目录。
Step 3. 检查Step 2选择的维度是否有对应的资源目录。如果没有,就返回到Step 2继续处理。如果有,那么就继续往下执行Step 4。在我们这个例子中,要一直重复执行Step 2,直到检查到language这个维度时。
Step 4. 消除那些不包含有Step 2所选择的资源维度的目录。在我们这个例子中,就是要消除那些不包含有en这个language的目录:
- drawable-en/
- drawable-en-port/
- drawable-en-notouch-12key/
Step 5. 继续执行Step 2、Step 3和Step 4,直到找到一个最匹配的资源目录为止,即剩下最后一个目录为止。在我们这个例子中,下一个要检查的维度是screen orienation。由于设备的screen orienation为port,因此,所有不包含有port资源维度的目录将被消除:
- drawable-en-port/
最后剩下来的目录就只有drawable-en-port,因此,它就是最匹配的资源目录了,这时候所有drawable类型的资源都可以从这个目录中获取。
注意,我们在编译和打包应用程序资源的过程中,会生成一个resources.arsc文件,这个文件记录了所有的应用程序资源目录的信息,包括每一个资 源名称、类型、值、ID以及所配置的维度信息。我们可以将这个resources.arsc文件想象成是一个资源索引表,这个资源索引表在给定资源ID和 设备配置信息的情况下,能够在应用程序的资源目录中快速地找到最匹配的资源。
最后,我们可以通过图3来总结应用程序资源的编译、打包以及查找过程:
图3 应用程序资源的编译、打包以及查找过程
通过图3我们就可以看出:
A. 除了assets和res/raw资源被原装不动地打包进APK之外,其它的资源都会被编译或者处理。
B. 除了assets资源之外,其它的资源都会被赋予一个资源ID。
C. 打包工具负责编译和打包资源,编译完成之后,会生成一个resources.arsc文件和一个R.java,前者保存的是一个资源索引表,后者定义了各个资源ID常量。
D. 应用程序在运行时通过AssetManager来访问资源,或通过资源ID来访问,或通过文件名来访问。
在接下来的一系列文章中,我们主要关注以下三个关键情景:
1. 应用程序资源的编译和打包过程;
2. 应用程序资源的初始化过程;
3. 应用程序资源的查找过程。
转至:http://mobile.51cto.com/android-387419.htm
相关推荐
学生信息管理系统-----------无数据库版本。资源来源于网络分享,如有侵权请告知!
2024年福建省村级(居委会)行政区划shp数据集 坐标系:WGS1984
win32汇编环境,对话框中显示bmp图像文件
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数。 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电耗、匀速工况续航、百公里电耗等信息。 实际项目中使用的计算仿真模型.
2020CCF下降2020 CCF大数据与计算智能大赛-非结构化商业文本信息中隐私信息识别-第7名方案bert base + flat + crf + fgm + swa + pu learning策略 + clue数据集 = test1单模0.906词向量https://github.com/Embedding/Chinese-Word-Vectors SGNS(Mixed-large 综合)loss mask相关代码为pu learning策略的实现主要模块版本 python 3.6.9火炬 1.1.0变压器 3.0.2pytorchcrf 1.2.0torchcontrib 0.0.2
计算机系毕业设计
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
基于SpringBoot+MySQL图书销售管理系统网上书店项目源码+数据库(高分毕业设计&课程设计) 该项目是个人大作业项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 图书管理系统 框架介绍 依赖 版本 Spring Boot 2 Mybatis Plus 3.5.3 jjwt 0.11.2 vue 2.0 ehcache 2.10.9 系统采用前后端分离,前端打包后放在 /resources/static 目录下面 直接启动后端工程即可访问 系统亮点 采用rsa非对称加密算法生成 jwt认证密钥 springboot集成ehcache作为缓存 采用aop方式记录接口访问日志 使用h2内存数据库,启动应用执行自动建表语句和初始化数据 统一异常和响应进行封装 集成springdoc作为接口文档 系统访问 http://wholevoid.com:9090/ 用户名及密码 admin/123456 图书管理系统 框
二极管钳位三电平VSG仿真模型 1.加入中点电位平衡 2.仿真有视频教程 3.THD均<5% 可以在此模型的基础上加入自适应控制、模型预测控制等等
基于Halcon的机器视觉试验平台的设计与研究 20181126
腾讯云开发者工具套件(SDK)3.0,SDK3.0是云 API3.0 平台的配套工具。目前已经支持cvm、vpc、cbs等产品,后续所有的云服务产品都会接入进来。新版SDK实现了统一化,具有各个语言版本的SDK使用方法相同,接口调用方式相同,统一的错误码和返回包格式这些优点。 为方便 Python 开发者调试和接入腾讯云产品 API,这里向您介绍适用于 Python 的腾讯云开发工具包,并提供首次使用开发工具包的简单示例。让您快速获取腾讯云 Python SDK 并开始调用。
说明文档1 队伍简介初赛名次第42名复赛名次第22名队伍名把球给我两名队员全部来自中国科学院大学2 算法思路首先手工标记第一阶段2015年和2017的图像里的建筑物,将大图像划分成小图像,训练多个模型,识别出图像中的建筑物,不对测试集(第二阶段的图像)进行任何标注,直接在图像上预测,分别识别出2015和2017的建筑物,再将所得的两张建筑物图像相减,对结果文件进行边缘平滑和散点去除即可得出最后的结果。切割成160*160、224*224、256*256大小的小图片训练模型基于第一阶段的训练数据,分别训练了deeplabv2、resnet_fcn两个模型,分别在3种大小的图像上训练得到了5个模型(由于resnet最小图像限制为197,只用了224和256两种大小的图像),设定输出概率大于0.5判定为建筑物,小于0.5则为非建筑物未在测试数据上进行建筑物标注,线下建筑物识别准确率82%左右,经过标注,建筑物识别准确率能达到90%。复赛初始提交,泛化成绩0.742。经过数据标注和再训练,最终成绩0.829。数据增强用于模型训练阶段,数据后处理是对
tdm64-gcc-5.1.0-2 (不盈利分享)
python语言mp3pl爬虫程序代码XQZQ
三相不平衡电压下T型NPC三电平并网逆变器并网控制 1.采用正负序分离锁相环以及正序PI控制,负序PI控制 2.采用中点电位平衡控制-零序电压注入法 3.采用SVPWM羊角波调制方式 4.提供参考文献 提供仿真源文件,电流环参数设计,正负序分离方法详解,零序电压注入法详解,SVPWM调制原理
Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都