2013-03-27 18 views
5

ここに私は2つのプロジェクトがあります。 LibraryProjectMainProjectとしましょうMainProjectは、LibraryProjectをライブラリとして参照しています。ライブラリプロジェクト内のプロジェクトからリソースを取得する方法

MainProjectに特定のドロウアブルが定義されているかどうかを調べる必要があるアクティビティが1つあります(「logo.png」としましょう) 。LibraryProjectの一つの活性における

どのように、MainProjectres/drawableフォルダにこのイメージを持っている場合ディスカバー?

Obviouslly私はR.drawable.logo != 0(またはそのバリエーション)かどうかを確認しようとしましたが、ご存知のように画像がのres/drawableフォルダにないため、この行はコンパイルされません。

私もgetResources().getIdentifier("logo", "drawable", null) != 0を試しましたが、.getIdentifier()は常にゼロを返すので、このブール式は常にfalseを返します。

答えて

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からで、LibraryProjectからではないことはわかりません –

+0

ライブラリプロジェクトからコンテキストを取得するにはどうすればよいですか? – Vijay

0

ライブラリプロジェクトでデフォルトのリソースを提供する必要があります。 MainProjectに同じ名前のリソースがある場合は、ライブラリプロジェクトリソースを上書きします。

たとえば、両方のプロジェクトで "res/drawable/logo.png"を指定すると、ライブラリプロジェクトのR.drawable.logoは、 "res/drawable"フォルダにある "logo.png"イメージを使用します。メインプロジェクト。


この答えは、主プロジェクトが存在する場合、それの使用を強制する唯一の方法は、リソースを持っている場合ライブラリプロジェクトを発見する方法を扱っていません。

+0

私はあなたに同意するが、これはMainProjectが定義されていない場合ので、私はしたくないものをexactillyですリソースには、LibraryProjectのリソースが表示され、私はこれを望んでいません。 MainProjectがリソースを提供していない場合、私は知りたいことと何か他のことをしたい。 –

+0

@ Daleの答えにはおそらく約束があります。いくつかの実験が必要ですが、私があなたの靴の中にいたなら、私はそのルートに従います。もう1つの方法は、ライブラリプロジェクトのデフォルトリソースが見つかったかどうかをテストできるように、非常に小さなデフォルトリソースを作成し、バイトサイズなどのシグネチャをアプリケーションに保存することです。それ以外の場合は、メインプロジェクトリソースが存在します。 –

0

メインプロジェクトでコンテキストをライブラリに渡して、context.getString()を呼び出します。

関連する問題