Android Xamarin中为ImageView设置SVG文件报错,求解决方案
正确在Xamarin Android中为ImageView加载SVG的方法
嘿,我懂你碰到的麻烦了——直接用Resources.System.GetDrawable加载SVG肯定会出问题,因为Android原生的常规Drawable和ImageView默认不支持SVG矢量图,在Xamarin环境里得用专门的方式来处理才行。下面给你两种靠谱的实现方案:
方案一:用AppCompatImageView直接加载(最简单的原生方案)
这个方法不需要额外引入第三方库,只要你的项目已经引用了Xamarin.AndroidX.AppCompat包(大部分Xamarin Android项目都会默认包含),就能轻松搞定:
- 把布局里的普通
ImageView替换成AppCompatImageView:
<androidx.appcompat.widget.AppCompatImageView android:id="@+id/svgImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" />
- 在代码里直接调用
SetImageResource加载你的SVG资源,别再用Resources.System.GetDrawable了:
var svgImageView = FindViewById<AppCompatImageView>(Resource.Id.svgImageView); svgImageView.SetImageResource(Resource.Drawable.Typogy1);
小提醒:要确认你的SVG文件放在
Resources/drawable目录下,并且文件的属性里「生成操作」设置为AndroidResource(右键文件→属性就能查看修改)。
方案二:用VectorDrawableCompat手动加载(兼容低版本系统)
如果你的项目需要兼容Android 5.0(API 21)以下的旧系统,推荐用VectorDrawableCompat来手动加载SVG,它会自动处理兼容性问题:
var svgDrawable = VectorDrawableCompat.Create(Resources, Resource.Drawable.Typogy1, Theme); var imageView = FindViewById<ImageView>(Resource.Id.imageView); imageView.SetImageDrawable(svgDrawable);
为啥你的原代码会报错?
Resources.System.GetDrawable是用来获取系统内置的Drawable资源的,根本不是给你加载本地项目里的SVG用的。就算你换成Resources.GetDrawable,普通的ImageView在非AppCompat环境下也解析不了SVG格式,所以才会抛出异常~
内容的提问来源于stack exchange,提问作者Santhiya
相关产品推荐
相关产品推荐

