这里我们通过C#的反射机制来实现这个功能,以获取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);
需要指出的是,在原生技术中,也可以通过反射实现这个功能,但其反射的目标对象是JVM对象。而在上述代码中,我们使用的是C#的反射机制,因为在Xamarin.Android中,Resource.Drawable是一个C#对象,而不是一个托管的JVM对象,所以如果我们使用Java的反射机制去获取其内容,反而会失败。