Android Resource概述

本文介绍了Android应用资源的分类,包括界面布局、Java源文件和资源文件。资源文件主要分为/res/和/assets/目录。/res/目录下的资源通过R.java文件访问,如animator、anim、color、drawable、layout、menu、raw和value等。/assets/目录则保存原生资源,需通过AssetManager读取。资源使用包括在Java代码中通过R文件和Resources类,以及在XML布局文件中的引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、应用资源分类
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对象

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值