Java 无效的可绘制标记向量-appcompat-v7:24.1.1

Java 无效的可绘制标记向量-appcompat-v7:24.1.1,java,android,Java,Android,好的,我已经阅读了关于类似问题的大部分可用答案,但没有任何东西能解决我的问题 gradleclasspath'com.android.tools.build:gradle:2.1.2' android { defaultConfig { minSdkVersion 16 targetSdkVersion 24 vectorDrawables.useSupportLibrary = true } } dependencies { compi

好的,我已经阅读了关于类似问题的大部分可用答案,但没有任何东西能解决我的问题

gradle
classpath'com.android.tools.build:gradle:2.1.2'

android {
   defaultConfig {
      minSdkVersion 16
      targetSdkVersion 24
      vectorDrawables.useSupportLibrary = true
   }
}

dependencies {
    compile 'com.android.support:recyclerview-v7:24.1.1'
    compile 'com.android.support:appcompat-v7:24.1.1'
    compile 'com.android.support:cardview-v7:24.1.1'
    compile 'com.android.support:support-v4:24.1.1'
    compile 'com.android.support:design:24.1.1'
}
activity.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ViewItem"
    tools:ignore="MissingPrefix">

    ...

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_gravity="center_vertical"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="10dp"
        android:foregroundGravity="center_vertical|center|center_horizontal"
        app:srcCompat="@drawable/ic_car" />

    ...

</ScrollView>

...
...
向量ic_car.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24"
    android:viewportWidth="24">

    <path
        android:fillColor="#5c5c5c"
        android:pathData="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21 .42 -1.42 1.01L3 12v8c0
.55 .45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55 .45 1 1 1h1c.55 0 1-.45
1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5 .67 1.5
1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5 .67 1.5
1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z" />
    <path android:pathData="M0 0h24v24H0z" />
</vector>


我的活动类扩展了
AppCompatActivity
,所有
android:src
标记都被更改为
app:srcompat
,但我仍然在设置为
16
minSdkVersion上看到
无效的可绘制标记向量
错误

事实是,看看您的代码,它应该可以在库的任何版本中工作,因为您只使用srcCompat属性。
我怀疑的一个问题是,您的向量位于drawable-21文件夹中,而在常规drawable文件夹中,您有一个引用这些drawable的文件。这是在库的早期版本中完成的一种方法,但由于下面的更改而不再有效。只需将实际矢量文件移动到可绘制文件夹。
我们有时会遇到类似的问题,可以通过将
ImageView
更改为
AppCompatImageView
来解决。尽管图书馆应该自动完成这项工作,但有时似乎没有
如果向量是复合图像(例如分层图像)的一部分,则代码仍有可能中断。或者它在您尚未发布代码的其他地方中断,例如,如果您将向量设置为ImageButton上的leftImage。正如@Zeke所回答的,这些功能在23.3中被删除。尽管如此,它还是在23.4中返回的,通过将以下内容添加到您的活动中使其可用

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
他们仍然警告您这可能会导致内存泄漏。你看,虽然对于最小的用途来说,这不应该是个问题

一个简单的解决方法是创建Drawable并在代码中设置它。像这样的东西

Drawable icon = AppCompatDrawableManager.get().getDrawable(context, resVectorID);  
// Set it for example as a left image of button
button.setCompoundDrawablesWithIntrinsicBounds( icon, null, null, null );

我没有测试过,也不知道这是否会导致记忆问题。如果有人能跟进,我会很高兴的。

问题在升级到Android studio 2.2后自行解决了。

在我的情况下,崩溃是由于使用在棒棒糖前的设备上获取矢量可绘制。我正试图创建一个可以通过

从Android Support Library 23.3.0开始,支持向量绘图工具可以 只能通过app:srcCompat或setImageResource()加载

解决方案:用于创建可绘制图形

但是,您也可以使用它来读取/解码UI线程上的位图。

我喜欢这样:

public static final Drawable getMyDrawable(Context context, int id) {
     final int version = Build.VERSION.SDK_INT;
     if (version >= 21) {
         return ContextCompat.getDrawable(context, id);
     } else {
         return VectorDrawableCompat.create(context.getResources(), id,  context.getTheme());
     }
}

你试过用android:src而不是app:srcCompat
@MuddassirAhmed是的,我当然试过了。这只发生在发行版,还是在所有版本中?@lionscribe正如Zeke所说,在所有版本中都需要做3件事;1)
vectorDrawables.useSupportLibrary=true
gradle上的
;2) 
static{AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);}
关于活动呈现SVG;3)
app:srccomat
而不是
ImageView
中的
android:src
;从
24.2.0