web-dev-qa-db-ja.com

私の場合、動的な名前でリソースにアクセスするにはどうすればよいですか?

次のような変数として画像名を取得した場合:

var imageName = SERVICE.getImg();

次に、R.drawable.????でリソースを取得するにはどうすればよいですか。R.drawable[imageName]を試しましたが、失敗しました。助言がありますか?

39
Leem
_int id = getResources().getIdentifier(imageName, type, package);
_

これにより、探しているリソースのIDが取得されます。 これを使用すると、Rクラスからリソースにアクセスできます。

nameパラメータのみを使用:

次のような形式を使用して、「name」パラメーターに3つの情報すべてを含めることもできます:_"package:type/image_name"_、次のようなもの:

_int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null);
_

これは、getIdentifier()の呼び出し方法を変更できない、または変更したくない外部コンポーネントまたはライブラリを使用している場合に役立ちます。例: AOSP Launcher

52

これを試して:

int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
28
Dark Magic

あなたは反射が必要です。

R.drawable.image1があるとすると、「image1」という文字列名でアクセスしたい場合は、次のように機能します。

String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);

ただし、画像のIDのみを取得することに注意してください。実際のドローアブルを取得するには、インフレーターが必要です。

12
xandy

この機能を使用

public static String getResourceString(String name, Context context) {
    int nameResourceID = context.getResources().getIdentifier(name,
            "string", context.getApplicationInfo().packageName);
    if (nameResourceID == 0) {
        throw new IllegalArgumentException(
                "No resource string found with name " + name);
    } else {
        return context.getString(nameResourceID);
    }
}
3
clydealmighty

getIdentifier メソッドを使用して、リソースIDを名前で取得できます。詳細は this threadを確認してください。

0
Mojo Risin