這里我們通過(guò)C#的反射機(jī)制來(lái)實(shí)現(xiàn)這個(gè)功能赌朋,以獲取Resource/drawable文件夾下的圖片為例:
public int getResourceByReflect(String imageName) {
var drawable = typeof(Resource.Drawable);
int r_id = 0;
try {
var field = drawable.GetField(imageName);
r_id = (int)field.GetValue(field.Name);
} catch (Exception e) {
}
return r_id;
}
使用方法:
var id = getResourceByReflect(iconItem.Name);
if (id == 0) return;
var picture = BitmapFactory.DecodeResource(Context.Resources, id);
需要指出的是嫁乘,在原生技術(shù)中杯瞻,也可以通過(guò)反射實(shí)現(xiàn)這個(gè)功能,但其反射的目標(biāo)對(duì)象是JVM對(duì)象端圈。而在上述代碼中焦读,我們使用的是C#的反射機(jī)制,因?yàn)樵赬amarin.Android中舱权,Resource.Drawable是一個(gè)C#對(duì)象矗晃,而不是一個(gè)托管的JVM對(duì)象,所以如果我們使用Java的反射機(jī)制去獲取其內(nèi)容宴倍,反而會(huì)失敗张症。