您的位置:首页 > 移动开发 > Android开发

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/下的文件资源,通过以下方式获取输入流来进行写操作

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对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android