Android中ImageView引用drawable目录SVG文件崩溃如何解决
问题原因
Android 原生资源系统不支持直接识别原始SVG格式文件。你把后缀为.svg的源文件直接放到res/drawable目录后,系统会按Android原生Drawable的规则解析文件,碰到SVG专属的<svg>根标签、属性时无法识别,就会抛出InflateException导致布局加载失败、应用崩溃。
你提供的SVG图标本身代码没有语法问题,纯粹是使用方式不对。
正确使用步骤(官方推荐方案,无额外兼容问题)
- 不要直接把原始SVG文件拷进drawable目录,用Android Studio自带工具转成系统可识别的VectorDrawable格式:
- 在项目目录树里右键点击
res/drawable文件夹,依次选择New -> Vector Asset - 弹窗里Asset Source选择
Local file (SVG, PSD),点击浏览按钮选中你本地存的那个SVG文件 - 工具会自动完成格式转换,你可以在预览窗口确认图标显示正常,按需调整尺寸、不透明度参数后,点
Next完成导入
- 在项目目录树里右键点击
- 导入完成后,drawable目录下会生成一个同名的XML文件,这个就是Android可识别的矢量图资源,直接把它设置给ImageView的
android:src属性即可正常显示。
低版本兼容配置
如果你的应用需要兼容API 21以下的设备,额外做两步配置即可:
- 在模块级
build.gradle的defaultConfig块里开启矢量图兼容支持:
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
- 确保项目已经引入AndroidX AppCompat依赖,布局中使用
AppCompatImageView替代原生ImageView,引用资源时用app:srcCompat代替android:src属性设置矢量图资源。
注意:不要尝试手动把SVG文件后缀改成.xml直接使用,文件内部的标签结构不符合Android VectorDrawable规范,解析器识别不了,还是会崩溃。
内容的提问来源于stack exchange,提问作者Aniket Jain
相关产品推荐
相关产品推荐

