Android 反射方法调用R文件,解除包名依赖
来源:互联网 发布:郑和热水瓶 知乎 编辑:程序博客网 时间:2024/05/17 02:32
如果是R.id 或者R.drawable ,可以通过 context.getResource().getIdentifier(name,"id",context.getPackageName()) 这种方式获得ID,
经过测试发现R.styleable R.attr 获取不到,这种情况可以通过反射的方法
/** * * @param context * @param type * @param name * @return */public static Object getResourceData(Context context, String type, String name) {try {Class<?> arrayClass = getResourceClass(context, type).getClass();Field intField = arrayClass.getField(name);return intField.get(arrayClass);} catch (Exception e) {e.printStackTrace();}return null;}private static HashMap<String, Object> ResourceClass = new HashMap<String, Object>();private static Object getResourceClass(Context context, String type) {if (ResourceClass.containsKey(type)) {return ResourceClass.get(type);} else {try {Class<?> resource = Class.forName(context.getPackageName() + ".R");Class<?>[] classes = resource.getClasses();for (Class<?> c : classes) {int i = c.getModifiers();String className = c.getName();String s = Modifier.toString(i);if (s.contains("static") && className.contains(type)) {ResourceClass.put(type, c.getConstructor().newInstance());return ResourceClass.get(type);} else {continue;}}} catch (Exception e) {e.printStackTrace();}}return null;}
这种方法兼容R文件里的所有内容,取出来之后类型强制转换一下就好了
(int[]) getResourceData(context, "styleable", "Setting")
(Integer) getResourceData(context, "id", "title")
阅读全文
0 0
- Android 反射方法调用R文件,解除包名依赖
- storm解除twitter4jar包依赖的方法
- 反射android R文件
- android 修改项目的包名以及所有引用的r文件的包名
- Android获取其他包的Context,反射实现方法调用
- Android 更改R.java的包名。
- Android 资源名获取R文件id
- android 反射机制和反射调用方法
- Android反射调用hide方法
- Android studio修改项目(工程)的包名,并保证所有文件导入的R文件正确
- Android studio修改项目(工程)的包名,并保证所有文件导入的R文件正确
- Android studio修改项目(工程)的包名,并保证所有文件导入的R文件正确
- Android 获取调用接口的包名
- 【C#】反射应用-通过方法名调用方法
- Android一键修改包名(package name)并自动import R文件和修改manifest.xml中的包名
- android调用系统Settings界面的方法及其对应的包名(附demo)
- android studio 之修改包名导致所有R文件报错的解决办法(简单、暴力)
- Android获取其他包的Context实例,然后调用它的方法,反射!!!
- 基于redis分布式锁实现“秒杀”
- 关于导弹模型建立
- WebView:onReceiveError的应用与变迁
- java I/O系统(4)-RandomAccessFile类
- bootstrap table 合并单元格
- Android 反射方法调用R文件,解除包名依赖
- windows下面安装Python和pip终极教程
- 【Java深入】ArrayList源码剖析(二)
- 最短路径
- xilinx FPGA 配置原理
- 解决node-sass偶尔安装失败的方法
- bzoj 2049 [Sdoi2008]Cave 洞穴勘测
- warning: control reaches end of non-void function
- Bootstrap学习-环境安装