我正试图建一个图书馆。我在res
目录下有一个Android库项目和一些资源,我想在库项目的代码中访问这些资源。Android的文档上写着:
库模块中的源代码可以通过其R类访问自己的资源。
但我就是想不出怎么做。因为它是一个库,打算从其他应用程序中使用,而不是自己运行,所以我没有Activity
,所以不能让Context
使用getResources()
。如何在没有上下文的情况下显式地访问这些资源?
发布于 2017-01-06 00:57:42
如果没有活动,就不可能使用R类。如果在库中有测试应用程序,则测试应用程序将能够访问R,但不能访问库本身。
不过,您仍然可以按名称访问资源。例如,我的图书馆里有一个这样的类,
public class MyContext extends ContextWrapper {
public MyContext(Context base) {
super(base);
}
public int getResourceId(String resourceName) {
try{
// I only access resources inside the "raw" folder
int resId = getResources().getIdentifier(resourceName, "raw", getPackageName());
return resId;
} catch(Exception e){
Log.e("MyContext","getResourceId: " + resourceName);
e.printStackTrace();
}
return 0;
}
}
(有关https://stackoverflow.com/a/24972256/1765629的更多信息,请参见ContextWrappers)
库中的对象的构造函数采用上下文包装器,
public class MyLibClass {
public MyLibClass(MyContext context) {
int resId = context.getResourceId("a_file_inside_my_lib_res");
}
}
然后,在使用lib的应用程序中,我必须传递上下文,
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
MyLibClass a = new MyLibClass(new MyContext(this));
}
}
MyContext、MyLibClass和a_file_inside_my_lib_res,它们都生活在库项目中。
希望能帮上忙。
https://stackoverflow.com/questions/28028741
复制相似问题