首页 > android > android通过反射机制获取资源id的3种方法和详细解释

android通过反射机制获取资源id的3种方法和详细解释

2013年11月13日 发表评论 阅读评论

我也是刚刚才开始学习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种方法和详细解释就记录到这里。

分类: android 标签: , , ,
  1. 本文目前尚无任何评论.
您必须在 登录 后才能发布评论.
css.php