5

情况如下:我有两个项目。让我们说 aLibraryProject和 a MainProjectMainProject引用LibraryProject作为库。

我有一个活动LibraryProject需要发现是否MainProject定义了特定的可绘制对象,比如说“logo.png”(认为徽标图像必须由每个`MainProject定义,而不是由LibraryProject定义。

如何在 的一项活动中LibraryProject发现文件夹MainProject中是否有此图像res/drawable

显然我试图查看是否 R.drawable.logo != 0(或它的变体),但如您所知,这一行将无法编译,因为图像res/drawable不在LibraryProject.

我也试过getResources().getIdentifier("logo", "drawable", null) != 0,但这个布尔表达式总是返回 false,因为.getIdentifier()总是返回零。

任何的想法?

4

3 回答 3

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;
}
于 2013-03-27T17:36:41.323 回答
1

您需要在图书馆项目中提供默认资源。如果您的 中存在同名资源MainProject,它将覆盖 Library Project 资源。

例如,如果您在两个项目中都提供“res/drawable/logo.png”,那么R.drawable.logo在库项目中将使用 MainProject 的“res/drawable”文件夹中的“logo.png”图像。


这个答案没有解决图书馆项目应该如何发现主项目是否有资源,只是如何强制使用它,如果有的话。

于 2013-03-27T17:28:46.333 回答
0

让您的主项目将上下文传递给库,然后调用 context.getString()。

于 2013-03-27T17:29:21.333 回答