5

状況は次のとおりです。2 つのプロジェクトがあります。LibraryProjectaと a としましょうMainProject。はをライブラリとしてMainProject参照しLibraryProjectます。

LibraryProject特定のドローアブルが定義されているかどうかを確認する必要があるアクティビティが に 1 つありMainProjectます。たとえば、「logo.png」とします (ロゴ イメージは、LibraryProject ではなく、各 MainProject で定義する必要があると考えてください。

の 1 つのアクティビティで、のフォルダにこの画像があるかどうかを確認するにはLibraryProjectどうすればよいですか?MainProjectres/drawable

明らかに、if (またはそのバリエーション) を確認しようとしまし R.drawable.logo != 0たが、ご存知のように、この行はコンパイルされませres/drawableLibraryProject

私も試し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、ライブラリ プロジェクト リソースをオーバーライドします。

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


この回答では、メイン プロジェクトにリソースがあるかどうかをライブラリ プロジェクトが検出する方法については説明していません。

于 2013-03-27T17:28:46.333 に答える
0

メイン プロジェクトに Context をライブラリに渡させ、context.getString() を呼び出します。

于 2013-03-27T17:29:21.333 に答える