如果我将图像名称作为变量,如下所示:
var imageName = SERVICE.getImg();
然后,如何使用R.drawable.????
获取资源,我尝试了R.drawable[imageName]
,但失败了。有什么建议吗?
答案 0 :(得分:49)
int id = getResources().getIdentifier(imageName, type, package);
This will get you the ID of the resource you are looking for.有了它,您就可以从R类访问资源。
仅使用name
参数:
您还可以使用以下格式在“name”参数中包含所有3个信息:"package:type/image_name"
,例如:
int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null);
当您使用不能或不想改变getIdentifier()
调用方式的外部组件或库时,这非常有用。例如:AOSP Launcher3
答案 1 :(得分:24)
试试这个:
int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
答案 2 :(得分:12)
你需要反思。
假设您有R.drawable.image1,如果您想通过字符串名称“image1”访问它,以下应该可以工作:
String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);
但是请注意它只获得图像的ID,你仍然需要inflater从中得到实际的drawable。
答案 3 :(得分:3)
使用此功能
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);
}
}
答案 4 :(得分:0)
您可以使用getIdentifier方法,该方法会根据其名称为您提供资源ID。查看this主题以获取更多详细信息。