当前位置:首页 > Android开发 > Android基础 > 正文内容

Android项目中res与assets资源的区别

Git开源网2018-10-18 15:41:11Android基础2299

Android应用可以将资源存储在两个目录:res和assets。其中res目录中的资源只能存储在相应的子目录(如res/layout、res/values等)中,不能直接将资源存储在res目录中。assets目录中的资源可以任意存放,也可以建立任意层次的子目录。res和assets资源的主要区别如下。
1、引用资源的方式不同
     res目录中的所有资源都会在R类的相应子类中生成对应的int类型变量,需要使用这些变量来引用资源。例如res/layout/main.xml是布局文件资源,会在R.layout类中生成一个名为main的
变量,所以需要使用R.layout.main来引用main.xml。
     assets目录中的资源需要直接使用文件名来引用,例如assets/xyz.xml、assets/abc/test.db是assets目录中的两个资源文件,其中abc是assets中的子目录。可以使用如下的代码引用这两个资源文件,并返回与资源文件对应的InputStream对象,剩下的操作就是普通的Java代码输入流操作了。

InputStream is1=getResources().getAssets().open("xyz.xml");
InputStream is2=getResources().getAssets().open("abc/test.db");


2、处理方式不同
    res目录中的资源子目录除了raw外,其他资源目录中的资源文件都会被编译,这也是为什么将APK文件解压后无法直接查看XML格式资源文件内容的原因。而assets与res/raw目录中的资源文件不会做任何处理,所以将APK解压后,这两个目录中的资源文件都会保持原样.

3、子目录不同
     res目录只能有一层子目录,而且这些子目录必须是预定义的,如res/layout、res/values等都是合法的,而res/abc,res/xyz并不是合法的资源目录,在assets目录中可以建任意层次的子目录(只受操作系统的限制)



assets目录与res下的raw、drawable目录一样,也可用来存放资源文件,但它们三者有区别,对比总结如下表:




assets
res/raw
res/drawable
获取资源方式:
  文件路径+文件名  
    R.raw.xxx   
   R.drawable.xxx   
是否被压缩:
NO
NO
YES(失真压缩)
能否获取子目录下的资源:
YES
NO
NO



说明:
一、assets目录下的资源文件不会在R.java自动生成ID,所以读取assets目录下的文件必须指定文件的路径。可以通过AssetManager类来访问这些文件。比如要读取assets目录下的background.png:
Bitmap bgImg = getImageFromAssetFile( "background.png" );    
   
/**   
 * 从assets中读取图片   
 */   
private Bitmap getImageFromAssetsFile(String fileName)    
  {    
      Bitmap image = null;    
      AssetManager am = getResources().getAssets();    
      try   
      {    
          InputStream is = am.open(fileName);    
          image = BitmapFactory.decodeStream(is);    
          is.close();    
      }    
      catch (IOException e)    
      {    
          e.printStackTrace();    
      }     
      return image;    
  }

二、如果在res/drawable目录下建了一个名为ppt的子目录,则通过 R.drawable.ppt.xxx 是获取不到ppt目录下的xxx文件的,会报 "R.layout.ppt cannot be resolved" 的错误。若在assets目录下建立一个名为ppt的子目录,并将background.png放入其中,则代码 Bitmap bgImg = getImageFromAssetFile( "ppt/background.png" );  可正常运行。

扫描二维码推送至手机访问。

版权声明:本文由Git开源网_git开源代码资源网_git开源博客发布,如需转载请注明出处。

本文链接:http://gitoscc.com/?id=194

标签: Android

相关文章

Basic4Android  v8.50破解版+补丁

Basic4Android v8.50破解版+补丁

Basic4Android 8.50破解版是一款功能强大的Android 应用开发环境,B4A包含快速开发任何类型的Android应用所需的所有功能,B4A被全球数以万计的开发者使用,其中包括NASA,HP,IBM等公司,与B4i一起,您现...

E4A6.2版更新发布(2018.11.14)

6.2版更新日志(2018.11.14)  1、核心库的聊天框增加了“滚到底部”和“滚到顶部”命令,另外取消了添加项目后自动滚动到底部,请在添加项目后自行调用“滚到底部”命令;2、核心库的聊天框增加了“添加项目_图片”命令,可以添加图片消息...

火山安卓软件开发平台飞扬#11版发布

飞扬11版本相对飞扬10版本的升级内容:1. 支持调试器系统;2. 支持基于模拟器进行安装和调试;3. 增加了以下类库及相应例程:   1. 通讯录操作   2. 电子阅读器组件  &nbs...

易语言 安卓逆向APK查询工具源码

易语言 安卓逆向APK查询工具源码

易语言 安卓逆向APKcha询工具源码[Download]资源名称:易语言 安卓逆向APKcha询工具源码下载地址:蓝奏云 [/Download]...

E4A6.3版更新发布(2019.01.28)

6.3版更新日志(2019.01.28)1、扩展库增加了一个“调用导航”组件,可以直接调用百度和高德导航,无需申请密钥,具体用法请参考《9958、调用导航》(中级例程);2、扩展库增加了一个“红外操作”组件,可以调用手机的红外线功能来控制电...

Basic4Android v8.80破解版+补丁

Basic4Android v8.80破解版+补丁

Basic4Android 8.80破解版是一款功能强大的Android 应用开发环境,B4A包含快速开发任何类型的Android应用所需的所有功能,B4A被全球数以万计的开发者使用,其中包括NASA,HP,IBM等公司,与B4i一起,您现...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。