有时候我们想动态的根据一个字符串资源名获得到对应的资源id,如根据不同的图片名称获得对应的图片,此时就应该考虑如何实现.
大家知道,在编译Android工程时,系统会自动生成一个静态资源类R,里面根据不同的资源类型有不同的静态内部类,如id,drawable等等,而每个内部类中存放的是对应的16进制的静态资源id属性,而这些属性的属性名就是资源名.常用的方法有两个:
方法一:
利用getResources().getIdentifier(String name,String defType,String defPackage) 获取
public int getResource(String imageName){ Context ctx=getBaseContext(); int resId = getResources().getIdentifier(imageName, "mipmap", ctx.getPackageName()); //如果没有在"mipmap"下找到imageName,将会返回0 return resId; }
方法二:
使用反射机制获取
public int getResource(String imageName){ Class mipmap = R.mipmap.class; try { Field field = mipmap.getField(imageName); int resId = field.getInt(imageName); return resId; } catch (NoSuchFieldException e) {//如果没有在"mipmap"下找到imageName,将会返回0 return 0; } catch (IllegalAccessException e) { return 0; } }
PS:根据资源id获取资源名称:
String resName = getResources().getResourceName(resId);
时间: 2025-01-03 19:16:52