这里我们通过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的反射机制去获取其内容,反而会失败。

参考文献

Android根据图片文件名获取它的资源ID 的两种方式