How to access resource with dynamic name in my case?
If I get the image name as a variable like following:
var imageName = SERVICE.getImg();
Then, how can I get the resource with R开发者_Go百科.drawable.????
, I tried R.drawable[imageName]
, but it failed. Any suggestions?
int id = getResources().getIdentifier(imageName, type, package);
This will get you the ID of the resource you are looking for. With it, you can then access the resource from the R class.
Using only the name
parameter:
You can also include all the 3 info in the "name" parameter using the following format: "package:type/image_name"
, something like:
int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null);
This is useful when you're working with external components or libraries that you can't, or don't want to, change how getIdentifier()
is called. e.g.: AOSP Launcher3
Try this:
int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
You need reflection.
Suppose you have R.drawable.image1, if you wanna access it via the String name "image1", following should work:
String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);
But notice it only get the Id of the image, you still need the inflater to get the actual drawable from it.
Use this function
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);
}
}
You can use getIdentifier method which will give you the resource id by it's name. Check this thread for more details.
精彩评论