Android的应用资源可以分成两类:
1.可以通过R资源的清单了直接访问应用中的资源,这类资源保存在res目录下
2.不可以通过R资源清单类直接通过索引进行访问,这类资源存储在assets目录下
Android SDK 会在编译应用的时候,在R类中给res目录下的文件创建索引项
创建Assets目录:
在AndroidStudio中,直接在当前的app中右键:
创建后的Assets:
AssetManager类的使用:
由于 SDK 会在编译应用的时候没有将Assets目录下的文件的索引添加的R类中,因此当我们想使用Assets目录中资源的时候,就不能使用R类来直接进行索引了。此时我们需要使用 AssetManager来管理assets目录下的资源。
官方Api文档对AssetManager的描述:
这个类提供了一个低级别API允许你打开并读取一个原始的文件与应用程序捆绑在一起,作为一个简单的流的字节数。
提供的方法:
可以通过下面两个常用方法来访问Assets目录下的资源:
InputStream open(String fileName):通过文件名来获取原始文件的输入流
AssetFileDescriptor openFd(String fileName) :通过文件名来获取原始资源对应的AssetFileDescriptor
在ImageView中显示Assets目录下的图片:
运行效果:
示例代码:
public class AssetsActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_assets);
imageView = (ImageView) findViewById(R.id.imageView_showQr);
try{
//获取一个AssetManager
AssetManager assets = getAssets();
//通过open()方法获取文件名对应的原始二进制输入流
InputStream is = assets.open("girl.jpg");
imageView.setImageBitmap(BitmapFactory.decodeStream(is));
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
res目录下的各个文件夹存储的资源类型:
当我们想获取资源id所对应的实际值得时候,可以通过Resources类来完成:
Resources resources = getResources();
String appName = resources.getString(R.string.app_name);
Resources类提供了大量的方法来根据资源ID获取实际值