情况如下:我有两个项目。我们说LibraryProject
和MainProject
。 MainProject
将LibraryProject
引用为库。
我在LibraryProject
中有一个活动需要发现MainProject
是否定义了特定的drawable,让我们说“logo.png”(认为徽标图像必须由每个人定义) MainProject,而不是LibraryProject。
如何在LibraryProject
的一项活动中发现MainProject
是否在res/drawable
文件夹中包含此图片?
显然我已经尝试查看R.drawable.logo != 0
(或其变体),但是如您所知,此行将无法编译,因为该图像不在res/drawable
文件夹中LibraryProject
1}}。
我也试过getResources().getIdentifier("logo", "drawable", null) != 0
但是这个布尔表达总是返回false,因为.getIdentifier()
总是返回零。
有什么想法吗?
答案 0 :(得分:7)
你可以试试这个:(但请记住,上下文总是" ChildProject")
public static Drawable getDrawable(Context context, String resource_name){
try{
int resId = context.getResources().getIdentifier(resource_name, "drawable", context.getPackageName());
if(resId != 0){
return context.getResources().getDrawable(resId);
}
}catch(Exception e){
Log.e(TAG,"getDrawable - resource_name: "+resource_name);
e.printStackTrace();
}
return null;
}
答案 1 :(得分:0)
您需要在Library Project中提供默认资源。如果MainProject
中有一个名称相同的资源,它将覆盖Library Project资源。
例如,如果您在两个项目中都提供“res / drawable / logo.png”,那么库项目中的R.drawable.logo
将使用“res / drawable”中的“logo.png”图像MainProject的文件夹。
这个答案没有说明如果主项目有资源,图书馆计划应该如何发现,只有如何强制使用它(如果有的话)。
答案 2 :(得分:0)
让您的主项目将Context传递给库,并调用context.getString()。