如何从库项目中的项目获取资源

时间:2013-03-27 17:24:58

标签: android android-resources

情况如下:我有两个项目。我们说LibraryProjectMainProjectMainProjectLibraryProject引用为库。

我在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()总是返回零。

有什么想法吗?

3 个答案:

答案 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()。