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

Lee*_*eem 37 android android-widget android-ndk android-emulator android-layout

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

var imageName = SERVICE.getImg();
Run Code Online (Sandbox Code Playgroud)

然后,我怎么能得到资源R.drawable.????,我试过R.drawable[imageName],但它失败了.有什么建议?

nic*_*ild 52

int id = getResources().getIdentifier(imageName, type, package);
Run Code Online (Sandbox Code Playgroud)

这将获取您要查找的资源的ID. 有了它,您就可以从R类访问资源.

仅使用name参数:

您还可以使用以下格式在"name"参数中包含所有3个信息:"package:type/image_name"类似于:

int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null);
Run Code Online (Sandbox Code Playgroud)

当您使用不能或不想改变getIdentifier()调用方式的外部组件或库时,这非常有用.例如:AOSP Launcher3


小智 26

试试这个:

int id = getResources().getIdentifier(imageName, "drawable", getPackageName());
Run Code Online (Sandbox Code Playgroud)

  • 至于`R.id.???`等价物,它将是`int id = getResources().getIdentifier(imageName, "id", getPackageName());` (2认同)

xan*_*ndy 12

你需要反思.

假设您有R.drawable.image1,如果您想通过字符串名称"image1"访问它,以下应该工作:

String Name = "image1";
int id = R.drawable.class.getField(Name).getInt(null);
Run Code Online (Sandbox Code Playgroud)

但是请注意它只获得图像的Id,你仍然需要inflater从中得到实际的drawable.