在我的案例中如何使用动态名称访问资源?

时间:2011-07-05 13:58:00

标签: android android-layout android-emulator android-widget android-ndk

如果我将图像名称作为变量,如下所示:

var imageName = SERVICE.getImg();

然后,如何使用R.drawable.????获取资源,我尝试了R.drawable[imageName],但失败了。有什么建议吗?

5 个答案:

答案 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主题以获取更多详细信息。