1、为什么要使用反射获取资源ID
在将自己写的工具打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射机制动态的获取资源.
2、方法
int layout = 0;
String layout_name = "layout_activity";
try {
layout = Class.forName(getPackageName() + ".R$layout").getField(layout_name).getInt(layout_name);
}catch (IllegalAccessException e){
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
其中,$表示内部类的意思,所以getPackageName() + ".R$layout" 中 layout是R的内部类。
其他资源类推,比如drawable的类是 getPackageName() + ".R$drawable"
==================================
通过资源name获取资源id
Context mContext ;
String mPackageName = mContext.getPackageName(); //应用包名
Resources resources = mContext.getResources();
int rid = resources.getIdentifier("mbtn", "id", mPackageName); //name:资源名
通过资源id获取color
int color = mContext.getResources().getColor(rid);
通过资源id获取Drawable
Drawable d = mContext.getResources().getDrawable(rid);