2013-03-27 115 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()。