You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:27:03