Android Resource概述
2015-11-05 15:25
477 查看
一、应用资源分类
Android应用的源代码大致可分为三类:
界面布局文件:XML文件,文件中每个标签都对应相应的View标签。
Java源文件:Java代码实现,包括安卓四大组件等。
资源文件:主要以XML为主,还可包括.png、.jpg、.gif等图片资源。
Android应用资源文件分类:
1、/res/(编译时,aapt工具会自动生成生成R文件)
Android允许把应用中使用到的各种资源:字符串、颜色、数组、菜单、style等资源都集中放到res目录中定义。Android SDK在编译应用时,会自动在R.java文件中为这些资源创建索引,程序可直接通过R类进行直接访问。
可以通过R文件访问的资源,保存在res目录下。
2、/assets/
assets下存放的资源是应用无法直接访问的原生资源,应用需要通过AssetManager以二进制流的形式来读取资源。
无法通过R文件访问的资源,保存在assets目录下。
【/res/raw和/assets/】
(1)相同点
两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
(2)区别
res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID,即R.id.filename;asses文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
(3)读取实际数据
读取res/raw/下的文件资源,通过以下方式获取输入流来进行写操作
读取assets/下的文件资源,通过以下方式获取输入流来进行写操作
二、res资源的分类及存储
/res/animator/ :定义属性动画的XML
/res/anim/:定义补间动画的XML
/res/color/:定义不同状态下颜色列表的XML
/res/drawable/ :各种位图文件(.png,.jpg,.gif,.9.png)等,以及可以编译成如下Drawable对象的XML文件:
BitmapDrawable
NinePatchDrawable
StateListDrawable
AnimationDrawable
Drawable的其他各种子类的对象
/res/layout/ :布局文件 /res/menu/ :为应用程序定义的各种菜单的资源,包括选项菜单、子菜单、上下文菜单资源
/res/raw/ :任意类型的原生资源(音频文件、视频文件等)。可通过调用Resource对象的openRawResource(int id)来获取该资源的二进制输入流。实际上,如果应用程序需要使用原生资源,推荐把这些原生资源保存到assets目录下,在程序中使用AssetManager来访问这些资源
/res/value/:存放各种简单的常用的XML文件,如字符串、整数值、颜色值、数组等。在此不赘述,将另开文章分类讲解。
/res/xml/ :任意的原生XML文件,可在代码中使用Resources.getXML()进行访问。例如:搜索框架。
对于Android 4.2版本而言,/res/下没有包含drawable子目录,而是提供了drawable-ldpi(低分辨率),drawable-mdpi(中等分辨率),drawable-hdpi(高分辨率),drawable-xhdpi(超高分辨率)、大部分程序、系统会选择drawable-mdpi下的图片文件。
# ldpi: Low-density screens; approximately 120dpi.
#mdpi: Medium-density(on traditional HVGA) screens; approximately 160dpi.
#hdpi:High-density screens; approximately 240dpi.
#xhdpi: Extra high-density screens; approximately 320dpi. Added in API Level 8
三、使用资源
1、res资源的使用
(1)、在Java代码中使用R文件访问
格式:
package_name:指定R类所在包。若在代码中导入了R类则省略。
resource_type:R类中代表不同资源的子类。
resource_name:指定资源的name,可能是无后缀的文件名(eg.图片资源、视频资源),也可能是XML资源元素中由android:name属性指定的名称。
【注】R文件为所有的资源走定义了一个资源清单项,但清单项只是一个int型的值,并不是实际的资源。这里实际上市获取资源的引用。
(2)、在Java代码中访问实际资源
Android API允许直接使用Resources类获取实际资源。Resources类提供了大量的方法来根据R文件ID获取实际资源。Resources 由Context调用getResources获取。
(3)、在XML布局文件中使用资源
2、asset资源的使用
Resources.getAssets():获取访问/assets/下资源的AssetManager对象
Android应用的源代码大致可分为三类:
界面布局文件:XML文件,文件中每个标签都对应相应的View标签。
Java源文件:Java代码实现,包括安卓四大组件等。
资源文件:主要以XML为主,还可包括.png、.jpg、.gif等图片资源。
Android应用资源文件分类:
1、/res/(编译时,aapt工具会自动生成生成R文件)
Android允许把应用中使用到的各种资源:字符串、颜色、数组、菜单、style等资源都集中放到res目录中定义。Android SDK在编译应用时,会自动在R.java文件中为这些资源创建索引,程序可直接通过R类进行直接访问。
可以通过R文件访问的资源,保存在res目录下。
2、/assets/
assets下存放的资源是应用无法直接访问的原生资源,应用需要通过AssetManager以二进制流的形式来读取资源。
无法通过R文件访问的资源,保存在assets目录下。
【/res/raw和/assets/】
(1)相同点
两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
(2)区别
res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID,即R.id.filename;asses文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
(3)读取实际数据
读取res/raw/下的文件资源,通过以下方式获取输入流来进行写操作
InputStream is = getResources().openRawResource(R.id.filename);
读取assets/下的文件资源,通过以下方式获取输入流来进行写操作
AssetManager am = null; am = getAssets(); InputStream is = am.open("filename");
二、res资源的分类及存储
/res/animator/ :定义属性动画的XML
/res/anim/:定义补间动画的XML
/res/color/:定义不同状态下颜色列表的XML
/res/drawable/ :各种位图文件(.png,.jpg,.gif,.9.png)等,以及可以编译成如下Drawable对象的XML文件:
BitmapDrawable
NinePatchDrawable
StateListDrawable
AnimationDrawable
Drawable的其他各种子类的对象
/res/layout/ :布局文件 /res/menu/ :为应用程序定义的各种菜单的资源,包括选项菜单、子菜单、上下文菜单资源
/res/raw/ :任意类型的原生资源(音频文件、视频文件等)。可通过调用Resource对象的openRawResource(int id)来获取该资源的二进制输入流。实际上,如果应用程序需要使用原生资源,推荐把这些原生资源保存到assets目录下,在程序中使用AssetManager来访问这些资源
/res/value/:存放各种简单的常用的XML文件,如字符串、整数值、颜色值、数组等。在此不赘述,将另开文章分类讲解。
/res/xml/ :任意的原生XML文件,可在代码中使用Resources.getXML()进行访问。例如:搜索框架。
对于Android 4.2版本而言,/res/下没有包含drawable子目录,而是提供了drawable-ldpi(低分辨率),drawable-mdpi(中等分辨率),drawable-hdpi(高分辨率),drawable-xhdpi(超高分辨率)、大部分程序、系统会选择drawable-mdpi下的图片文件。
# ldpi: Low-density screens; approximately 120dpi.
#mdpi: Medium-density(on traditional HVGA) screens; approximately 160dpi.
#hdpi:High-density screens; approximately 240dpi.
#xhdpi: Extra high-density screens; approximately 320dpi. Added in API Level 8
三、使用资源
1、res资源的使用
(1)、在Java代码中使用R文件访问
格式:
[<package_name>.]R.<resource_type>.<resource_name>
package_name:指定R类所在包。若在代码中导入了R类则省略。
resource_type:R类中代表不同资源的子类。
resource_name:指定资源的name,可能是无后缀的文件名(eg.图片资源、视频资源),也可能是XML资源元素中由android:name属性指定的名称。
【注】R文件为所有的资源走定义了一个资源清单项,但清单项只是一个int型的值,并不是实际的资源。这里实际上市获取资源的引用。
(2)、在Java代码中访问实际资源
Android API允许直接使用Resources类获取实际资源。Resources类提供了大量的方法来根据R文件ID获取实际资源。Resources 由Context调用getResources获取。
Resources.getXxx(int id):根据R文件ID来获取实际资源
Resources res=getResources(); String s=res.getText(R.string.title); Drawable draw=res.getDrawable(R.drawable.logo); int[] arr=res.getIntArray(R.array.books);
(3)、在XML布局文件中使用资源
@[package_name:]<resource_type>/resource_name>
2、asset资源的使用
Resources.getAssets():获取访问/assets/下资源的AssetManager对象
相关文章推荐
- 使用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