Xamarin.Android中如何根据给定的文件名获取文件
这里我们通过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的反射机制去获取其内容,反而会失败。
参考文献
- 原文作者:岁寒
- 原文链接:http://www.suihanime.com/post/Xamarin/Xamarin.Android%E4%B8%AD%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E7%BB%99%E5%AE%9A%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。