How to access resource with dynamic name in my case?

前端 未结 5 1993
生来不讨喜
生来不讨喜 2020-12-01 04:02

If I get the image name as a variable like following:

var imageName = SERVICE.getImg();

Then, how can I get the resource with R.drawa

相关标签:
5条回答
  • 2020-12-01 04:48

    You can use getIdentifier method which will give you the resource id by it's name. Check this thread for more details.

    0 讨论(0)
  • 2020-12-01 04:52

    Try this:

    int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
    
    0 讨论(0)
  • 2020-12-01 04:52

    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.

    0 讨论(0)
  • 2020-12-01 04:58

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 05:07
    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

    0 讨论(0)
提交回复
热议问题