Android根据字符串型的资源名获取对应资源id


有时候我们想动态的根据一个字符串资源名获得到对应的资源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);

 

作者: caobotao
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM