android通过反射机制获取资源id的3种方法和详细解释
我也是刚刚才开始学习android,今天因为教程上说了需要通过java反映机制来调取系统资源id,那么我整理并研究了3种可行的方法,希望对大家有所帮助,另外我自己也记忆学习,做个记号。
第一种方法:
// 自定义getResourceId用来获取系统Field资源,反射机制实现的
private int getResourceId(String source) {
// TODO Auto-generated method stub
// 捕获异常
try {
Field field = R.drawable.class.getField(source);
//取得并返回资源的id的字段(静态变量)的值,按照我的理解,即获取R.java中的16进制值?
return Integer.parseInt(field.get(null).toString());
} catch (Exception e) {
// TODO: handle exception
}
return 0;
}
这种方法呢,就是通过Field的get方法来获取最终结果,当然Field是由R.drawable.class.getField(source)来获取
第二种方法:
其实只要将上方Field field = R.drawable.class.getField(source);改为:R.drawable.class.getDeclaredField(source);
那么getField和getDeclaredField有什么区别呢?您可以百度搜索,据我测试,2者皆可。
第三种方法:
private int getResourceId(String source) {
// TODO Auto-generated method stub
// 捕获异常
try {
//参数为:字符串,类名称(一般为drawable),包名称(可以到代码头部寻找:package com.example.ui_textview_textandimg_scaleornot;中package后面的,一般在第一行)
int resID = getResources().getIdentifier(source, “drawable”, “com.example.ui_textview_textandimg_scaleornot”);
return resID;
} catch (Exception e) {
// TODO: handle exception
}
return 0;
}
没有通过Field来返回,而是通过getResources()来获取系统资源之后,再通过getIdentifier(获取)
OK,android通过反射机制获取资源id的3种方法和详细解释就记录到这里。
近期评论