如何在Xamarin Forms中加载Android项目Drawable下的.XML矢量资源
可以直接从Android项目的drawable文件夹加载该类XML格式矢量图,你当前加载失败是API调用方式和配置错误,对应修复方案如下:
前置检查
首先确认你的phone.xml文件满足以下要求:
- 文件是符合Android Vector Drawable规范的矢量图文件
- 文件在Android项目的
Drawable目录下,生成操作属性已设置为AndroidResource - 若你的App需要兼容Android 5.0以下版本,需在
MainActivity的OnCreate方法中加配置:
AppCompatDelegate.CompatVectorFromSourcesEnabled = true;
修复加载逻辑
不要用ImageSource.FromFile加载,这个API是用于读取本地磁盘独立文件,无法识别打包进APK的Android内置资源,根据你使用的框架选择对应方案:
方案1:.NET MAUI 项目
直接去掉文件名的.xml后缀调用即可,MAUI会自动适配Android drawable资源:
var imgSource = ImageSource.FromFile("phone");
方案2:Xamarin.Forms 项目
你需要写少量Android平台专属代码,可通过依赖服务封装给跨平台层调用,Android端的核心加载逻辑如下:
// 获取矢量图的资源ID var resId = Android.App.Application.Context.Resources.GetIdentifier( "phone", "drawable", Android.App.Application.Context.PackageName ); // 读取矢量图drawable var drawable = AndroidX.Core.Content.ContextCompat.GetDrawable( Android.App.Application.Context, resId ); // 转成Xamarin.Forms可用的ImageSource var imgSource = Xamarin.Forms.ImageSource.FromStream(() => drawable.ToStream(Android.Graphics.Bitmap.CompressFormat.Png, 100) );
常见踩坑提示
- 调用Android drawable资源时不要加.xml后缀,Android资源系统会自动匹配对应格式的文件
- 不要将XML矢量图放到Drawable-v24等限定目录下,否则低版本Android设备会找不到资源
- 如果是带动态属性的AnimatedVectorDrawable,需要额外用Android原生的ImageView控件加载才能播放动画效果
内容的提问来源于stack exchange,提问作者user1034912
相关产品推荐
相关产品推荐

