AppCompat 23.3 Поддержка векторов больше не работает?

Я использовал вспомогательные векторные векторы, добавленные в Support Library 23.2 вместе с AppCompat. Я использовал векторные чертежи как с app:srcCompat и внутри StateListDrawable поэтому я мог использовать их с android:drawableLeft для моего TextView.

Начиная с обновления до версии 23.3.0 AppCompat работают только векторы в app:srcCompat . Всякий раз, когда я ссылаюсь на него,

 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 

Что изменилось, что теперь приводит к тому, что мои опорные векторные векторы поддержки не работают в некоторых случаях?

Обновление: они снова включаются в библиотеку поддержки 23:

Для пользователей AppCompat мы добавили API-интерфейс для повторного включения поддержки векторных чертежей из ресурсов (поведение, обнаруженное в 23.2), через AppCompatDelegate.setCompatVectorFromResourcesEnabled (true); – Имейте в виду, что это все еще может вызвать проблемы с использованием памяти и проблемы с обновлением экземпляров Configuration, поэтому почему она отключена по умолчанию.

Проверьте эту ссылку: 23.4.0 доступно сейчас
————————————————– ———

Согласно объявлению о выпуске для Android Support Library 23.3 :

Для пользователей AppCompat мы решили удалить функциональные возможности, которые позволяют использовать векторные чертежи из ресурсов на устройствах, предшествующих Lollipop, из-за проблем, обнаруженных в реализации в версии 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:srcCompat и setImageResource() продолжают работать.

Так что это ожидаемое изменение поведения. Вам придется использовать не-векторную графику для любого случая, который не обрабатывается srcCompat .

Если вы хотите продолжать использовать векторы до API 21, вы можете удалить строку

 vectorDrawables.useSupportLibrary = true 

(Или эквивалент, если вы используете плагин 1.5 Gradle, как показано в сообщении блога 23.2 ).

Это заставит Android Studio генерировать PNG во время компиляции приложений с minSdkVersion меньше, чем API 21, используя ваши векторы на устройствах API 21+, позволяя сохранить тот же код, что и с 23.2.1 за счет дополнительных размеров APK.

Поддержка VectorDrawable для pre-Lollipop была добавлена ​​в Support Library 23.2.0, а затем частично удалена в 23.3.0. В 23.4.0 и выше (не менее 25.1.0) эта удаленная часть возвращается, но за необязательным флагом (потому что она идет с ценой).

Подводя итог: в библиотеке поддержки 23.4.0, по крайней мере, 25.1.0, вы можете заставить VectorDrawable работать в некоторых случаях .

Я сделал эту диаграмму, чтобы помочь.

VectorDrawable cheatsheet

Использовать векторы как составные файлы (например, для textview) без использования

 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

Что приводит к документированному использованию большой памяти, просто надуйте вектор, используя

 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