次のような変数として画像名を取得した場合:
var imageName = SERVICE.getImg();
次に、R.drawable.????
でリソースを取得するにはどうすればよいですか。R.drawable[imageName]
を試しましたが、失敗しました。助言がありますか?
_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
これを試して:
int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
あなたは反射が必要です。
R.drawable.image1があるとすると、「image1」という文字列名でアクセスしたい場合は、次のように機能します。
String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);
ただし、画像のIDのみを取得することに注意してください。実際のドローアブルを取得するには、インフレーターが必要です。
この機能を使用
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);
}
}
getIdentifier メソッドを使用して、リソースIDを名前で取得できます。詳細は this threadを確認してください。