hgu*_*ser 15 resources android
我正在构建一个内部需要一些静态资源(images/xml等)的android库项目.
然后我想知道我可以把这些资源放在哪里以及如何访问它们?
因为我把资源放在了assets文件夹中.我使用AssetManager访问资源:
public class DataProvider {
byte[] getDrawableData(int num) {
AssetManager am = Resources.getSystem().getAssets();
InputStream is = null;
try {
is = am.open("t.jpg");
} catch (IOException e) {
return "".getBytes();
}
if (is != null) {
Drawable dw = Drawable.createFromStream(is, null);
Bitmap bm = ((BitmapDrawable) dw).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
return stream.toByteArray();
}
return "".getBytes();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误: W/System.err(19583): java.io.FileNotFoundException: t.jpg
问题是什么?
如上所述Sankar V,图书馆项目不支持原始资产.然后我似乎必须把resurces放在res文件夹下.
但我试图使用Resources.getSystem().getResources()....无法得到我想要的方法.人们说这种方法只能获得系统级资源而不是应用级资源.
如果这是事实.这是否意味着我必须在Context任何想要获取任何资源的地方持有对象的引用?
然后我想知道我可以把这些资源放在哪里以及如何访问它们?
来自Android Doc's
图书馆项目不能包括原始资产
这些工具不支持在库项目中使用原始资产文件(保存在assets /目录中).应用程序使用的任何资产资源都必须存储在应用程序项目本身的assets /目录中.但是,支持保存在res /目录中的资源文件.
文档参考链接: LibraryProjects
解决方案: 如何从应用程序项目访问保存在库项目的res /目录中的资源文件
注意:如果要从Library Project本身访问资源,请将资源添加到res/ directory不存在assets.因为资产中的文件不会与.jar文件捆绑在一起.您可以使用R.java文件中生成的引用照常访问它.
例如:从可绘制的用途访问图像
R.drawable.image_name
Run Code Online (Sandbox Code Playgroud)
这是否意味着我必须在任何想要获取任何资源的地方持有Context对象的引用?
实际上你应该持有对上下文的引用来访问资源
更新:
现在Android库项目可以生成为aar(Android Archive)文件,它允许您捆绑库项目所需的资源文件,而不是旧jar(Java Archive)文件,它只允许您捆绑Java类.
| 归档时间: |
|
| 查看次数: |
24087 次 |
| 最近记录: |