资源主要类型及存储位置和使用

一、资源主要类型

   1.无法通过R清单访问的原生资源,保存在assets目录下(assets目录要自己生成)或者res/raw下

     原生资源:音频、视频文件

   2.可通过R清单访问的资源,保存在res目录下

   可访问资源:各种图片和各种Drawable对象的XML文件

   3.res目录下的主要目录(个人不懂的目录)

     res/animator:存放属性动画

     res/anim:存放补间动画

     res/raw:保存原生资源

二、使用资源

方法一:

//从drawable目录中获取img这张图在R文件中的id
int img  = R.drawble.img;
//再利用resouce方法将使用id
getWindow().getBackgroundDrawableResource(img);

方法二:

1.方法一的问题:获得的知识int类型,并不是实际资源对象。

2.需要借助的类:Resourcecs类,称为“android访问资源的总管家”,提供了大量的方法将id变成对象。

Resourece类主要方法:

getXxx(int id):根据资源清单的id获取资源对象

getAssets():获取访问assets目录下资源的AssetManager对象

//直接调用Activity的getResources()
Resources res = getResources();
//获取字符串资源
String str = res.getText(R.string.title);
//获取数组资源
int [] array = res/getIntArray(R.array.books);

三、raw与asset目录的使用及区别

*res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。


*res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

*读取文件资源:

1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

  • InputStream is = getResources().openRawResource(R.raw.demo);  

2.(1)读取assets下的文件资源,通过以下方式获取输入流来进行写操作

  • AssetManager am = null;  
  • am = getAssets();  //也可不通过Resources获取AssetManager
  • InputStream is = am.open("filename");  

  (2)如果用Videoview来播放:

  VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie));

 

posted @ 2016-03-23 12:07  技术丶从积累开始  阅读(558)  评论(0编辑  收藏  举报