资源主要类型及存储位置和使用
一、资源主要类型
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));