XmlPullParserException: 无效的可绘制标记矢量图。

16

我正在使用NDK支持,遇到了以下错误:

Gradle:

版本: gradle-2.5-all

构建工具: gradle-experimental:0.2.1

XML:

    <vector android:height="24dp" android:viewportHeight="125.0"
android:viewportWidth="100.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M97.01,-2.98,-3C47.02,95.35"/>
</vector>

警告:

vector需要API级别21(当前最低级别为13),或使用Android Gradle插件1.4或更高版本进行构建

异常:

  FATAL EXCEPTION: main
 android.content.res.Resources$NotFoundException: File res/drawable/accelerometer.xml from drawable resource ID #0x7f020045
 at android.content.res.Resources.loadDrawable(Resources.java:2842)
 at android.content.res.Resources.getDrawable(Resources.java:1521)

...
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector
 at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:917)
 at android.graphics.drawable.Drawable.createFromXml(Drawable.java:858)

https://github.com/wnafee/vector-compat/issues/15 - Amit Vaghela
你解决了这个问题吗? - bendaf
3个回答

26

在Lollipop版本之前的设备上,您需要使用VectorDrawableCompat从资源中获取矢量图。

 someVectorDrawable = VectorDrawableCompat.create(context.getResources(), R.drawable.[some res id], null);

然后您可以设置ImageView的背景。


当我在使用drawableLeft属性时,针对API 19和buildToolsVersion "25.0.3"版本构建时,出现了错误。这个解决方法是我唯一可行的途径。 - Aleris
这个解决方案真是救了我一天!这是唯一的变通方法。我已经尝试使用构建工具26.0.0,但仍然遇到了同样的问题。 - AndroidRuntimeException
有没有想法如何通过xml包含菜单项(android:icon=@drawable/icon_name)来解决这个问题? - serv-inc
1
@serv-inc 使用app:srcCompat=@drawable/icon_name代替。 - Tristan Richard
这对我有用。在互联网上寻找解决方案很长时间后... 这帮了我很多忙。谢谢! - Carlos Espinoza

5
我发现了一个相当有趣的解决方法。如果你将背景设置为一个包含xml drawable的可绘制文件,那么异常/崩溃就会消失。
因此,创建一个具有以下内容的可绘制文件:
<selector
     xmlns:android="http://schemas.android.com/apk/res/android">
<item
     android:drawable="@drawable/your_image_here.xml" />
</selector>

并将该可绘制文件的名称作为背景...


3
如果仅适用于Android 5.0之前版本出现问题,请将以下内容添加到您的Activity中。
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接