2013-03-27 142 views
5

这里是情况:我有两个项目。我们假设一个LibraryProject和一个MainProjectMainProjectLibraryProject作为库引用。如何从库项目中的项目获取资源

我在LibraryProject中有一项活动需要发现,如果MainProject已经定义了特定的drawable,比如说“logo.png”(认为标识图像必须由每个MainProject定义,而不是由LibraryProject定义。

如何,在LibraryProject的一个活动,发现如果MainProject已在res/drawable文件夹这个形象?

Obviouslly我也想看看R.drawable.logo != 0(或变化的话),如果,但如你所知,此行将不会编译,因为图像不在的res/drawable文件夹中。

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

任何想法?

回答

5

你可以试试这个:(但要记住,上下文始终是“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; 
} 
+0

谢谢!这工作!我没有意识到上下文将来自MainProject而不是De LibraryProject – 2013-04-01 16:27:32

+0

如何从库项目中获取上下文? – Vijay 2016-07-08 05:00:34

0

您需要在库项目中提供默认资源。如果您的MainProject中有相同名称的资源,它将覆盖库项目资源。例如,如果您在两个项目中都提供了“res/drawable/logo.png”,那么库项目中的R.drawable.logo将使用位于“res/drawable”文件夹中的“logo.png”图像MainProject。


这个答案并没有解决图书馆计划应该如何发现,如果主体工程的资源,只有如何强制使用它,如果有一个。

+0

我同意你的观点,但是这是exactilly我不想要的东西,因为如果MainProject没有定义资源,LibraryProject的资源将显示,我不想要这个。如果MainProject不提供我想知道的资源并执行其他任何操作。 – 2013-03-27 17:33:43

+0

也许在戴尔的答案中有承诺。这需要一些试验,但如果我在你的鞋子里,我会遵循这条路线。另一种方法是创建一个非常小的默认资源,并在应用程序中存储签名(如字节大小),以便测试是否找到了Library Project默认资源。否则,主项目资源将存在。 – 2013-03-27 17:37:00

0

您的主项目是否将一个Context传递给库,并调用context.getString()。