无效的可绘制标签vector

我试图在棒棒糖设备上使用vector绘图。 我按照这里的指示做了所有的事情,但是我仍然遇到这个事故。

的build.gradle:

buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta6' } } apply plugin: 'com.android.application' repositories { maven { url 'http://maven.android-forever.com' } jcenter() } android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.test.app" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" vectorDrawables.useSupportLibrary = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0' compile "de.greenrobot:eventbus:2.4.0" compile 'de.greenrobot:greendao:2.1.0' compile "com.af:android-utility:1.0.0.9" compile project(':volleyplus') compile project (':libvlc') } 

triangle.xml:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/triangle_v"/> </selector> 

triangle_v.xml

 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="100dp" android:width="100dp" android:viewportHeight="100" android:viewportWidth="100"> <path android:name="triangle" android:fillColor="#FF0000" android:pathData="m 50,0 l 50,100 -100,0 z"/> </vector> 

layout.xml

 <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/triangle"/> 

我也试过app:srcCompat ,在这种情况下,绘制只是不显示。

Solutions Collecting From Web of "无效的可绘制标签vector"

我面临类似的问题,@ pedja自己的答案是有用的。 更一般地说,就像Chris Banes的关于vector drawable compat的文章中提到的那样,支持库的工作方式是通过一些钩子将前一版本的ImageView注入到系统上。 这隐含地要求使用AppCompat类的AppCompat版本,例如AppCompatActivity

在我的情况下,使用应用程序上下文,vector绘制在独立的类似于吐司的视图中使用,没有关联的活动。 我最终直接在xml布局定义中使用AppCompatImageView ,即类似的东西

 <android.support.v7.widget.AppCompatImageView android:id="@+id/some_id" android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/selector_referencing_vector_drawable"/> 

因此不需要魔术“钩子”机制。 正如testing,这也适用于Activity类,而不需要使用AppCompatActivity 。 以上所有都没有升级到23.2.1,这解决了一个不同的问题。

如果使用这个代码将与向量一起工作
vectorDrawables.useSupportLibrary = true

并将android:src更改为app:srcCompat

例如,

 <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/triangle"/> 

 <ImageView android:layout_width="match_parent" android:layout_height="match_parent" app:srcCompat="@drawable/triangle"/> 

问题是,我的活动不扩展AppCompatActivity但常规Activity

这在支持向量绘制的任何文档/示例中都没有指定

从pre-lollipop设备上的select器加载vector时也得到了这个问题:

在onCreate方法中使用AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

设置是否可以在android.graphics.drawable.DrawableContainer资源中使用旧平台(<API 21)上的vector绘图。 启用后,AppCompat可以截取框架中的一些可绘制的通货膨胀,这使得android.graphics.drawable.DrawableContainer资源中的vector绘制隐式膨胀成为可能。

 protected final void onCreate(Bundle savedInstanceState) { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); super.onCreate(savedInstanceState); ... 

它适用于23.2.0或23.4.0,而不是23.3.0。 认真Google!

首先,这个function最初是在23.2.0中发布的,但后来我们发现了一些内存使用和configuration更新问题,所以我们在23.3.0中删除了它。 在23.4.0(技术上是一个修复版本),我们重新添加了相同的function,但在一个需要手动启用的标志后面。

Ref: https : //medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.waicp19gh

您还需要包含新的vector支持库:

 compile 'com.android.support:support-vector-drawable:23.2.0' 

这里给出的答案忽略了一个情况,当你想添加一个drawable到一个textview,因为它给出了相同的错误。 在我的情况下,我有

 <TextView .... android:drawableLeft="some_vectore_drawable" /> 

我找不到如何解决这个问题,所以我从xml代码中删除了这一行,并以这种方式将它放在我的java代码中

 Drawable somevectordrable = AppCompatDrawableManager.get().getDrawable(context, R.drawable.somevectordrawable); mytextview.setCompoundDrawableWithIntrinsicBounds(somevectordrable, null, null, null); 

澄清代码,

  1. 使用AppCompatDrawableManager从drawables文件夹获取可绘制的vector

  2. 设置我们刚才得到的drawable作为我们的textview的左边的drawable

我在code.google上发现了这个问题。

这似乎与你同样的问题。 这有帮助吗? https://code.google.com/p/android/issues/detail?id=201843

这是support-v4,appcompat-v7库v23.2.0错误,它出现在API 19中。@tim提供了这个错误问题的链接。

您可以升级到新的库版本23.2.1,现在修复了bug。

如果您在加载vector绘图时看到自己使用<android.support.v7.widget.AppCompatImageView ,则可以更好地扩展AppCompatActivity而不是Activity ,然后返回使用常规<ImageView...app:srcCompat="@drawable/...