AppCompat 23.3支持向量不再有效?

我正在使用支持库23.2中添加的支持向量绘图以及AppCompat。 我用vectordrawables与app:srcCompat和一个StateListDrawable所以我可以使用他们与android:drawableLeft为我的TextView。

自升级到AppCompat的23.3.0版本以来,只有app:srcCompat中的vector正在工作。 每当我以另一种方式引用它

 FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package.name/.MainActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class Button ... Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class Button ... Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #14: invalid drawable tag vector at android.graphics.d 

现在什么改变导致我的支持向量drawable在某些情况下失败?

Solutions Collecting From Web of "AppCompat 23.3支持向量不再有效?"

更新:他们在支持库23中再次启用它:

对于AppCompat用户,我们已经添加了一个select性的API来通过AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)从资源(23.2中的行为)重新启用支持Vector Drawables。 – 请记住,这仍然可能会导致内存使用问题和更新configuration实例的问题,因此为什么默认情况下是禁用的。

检查这个链接:23.4.0现在可用
————————————————– ———

根据Android支持库23.3的发布公告 :

对于AppCompat用户,我们已经决定删除​​允许您使用棒棒糖前设备上的资源中的vector绘图的function,因为在23.2.0 / 23.2.1版本[ https://code.google。 com / p / android / issues / detail?id = 205236 , https://code.google.com/p/android/issues/detail ?id=204708 ]。 使用app:srcCompatsetImageResource()继续工作。

所以这是一个预期的行为改变。 对于srcCompat处理的任何情况,您必须使用非vectorgraphics。

如果您希望在API 21之前继续使用vector,则可以删除该行

 vectorDrawables.useSupportLibrary = true 

(或者如果您使用1.5.2 Gradle插件,则如23.2博客文章所示 )。

这会导致Android Studio在编译时针对minSdkVersion小于API 21的应用程序生成PNG,同时在API 21+设备上使用您的vector,从而使您可以保持与23.2.1相同的代码,但需要额外的APK大小。

支持库23.2.0中添加了对棒棒糖之前的VectorDrawable支持,然后在23.3.0中部分删除。 在23.4.0及以上(至less25.1.0),删除的部分是后面,但后面的一个可选的标志(因为它带有一个价格)。

综上所述: 在支持库23.4.0中,至less25.1.0,可以使VectorDrawable 在某些情况下工作

我已经使这个图帮助。

VectorDrawable作弊表

将vector用作compoundDrawables(例如textview)而不使用

 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

这导致logging的高内存使用率,只是使用vector膨胀

 Drawable drawable = AppCompatResources.getDrawable( getContext(), R.drawable.vector_resID ); if( drawable != null ) drawable.setBounds( 0, 0, iconSize, iconSize ); TextViewCompat.setCompoundDrawablesRelative( textView, null, null, drawable, null); 

这是navDrawer的工作方式