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 

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

Обновление: они снова includeся в библиотеку поддержки 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

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

 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

  • Как использовать и стилить новый AlertDialog из appCompat 22.1 и выше
  • Почему Eclipse автоматически добавляет поддержку библиотеки appcompat v7 всякий раз, когда я создаю новый проект?
  • Как добавить android.support.v7.widget.GridLayout в intelliJidea?
  • Используйте вкладку с новым ToolBar (AppCompat v7-21)
  • Значок приложения не отображается на панели действий.
  • Что такое расширение AppCompatActivity по сравнению с ActionBarActivity?
  • Как изменить значки меню навигации и переполнения панели инструментов (appcompat v7)?
  • AppCompatActivity.onCreate можно вызывать только из одной и той же группы библиотек
  • Как реализовать DrawerArrowToggle из Android appcompat v7 21 library
  • NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
  • Xamarin Forms Android Error: установите пакет «Android Support Library»,
  • Interesting Posts

    JPA Несколько встроенных полей

    безопасно ли поддерживать подключение к базам данных в течение длительного времени

    Пользовательский список

    Нет звука HDMI на телевизоре от HTPC

    выделить матрицу в C

    Разбить рабочий лист Excel на несколько рабочих листов на основе столбца с VBA

    Формула Excel отображает формулу, а не результат

    Пост-инкремент и концепция предварительного инкремента?

    Запланированная задача, выполняемая как SYSTEM – выполнить что-то в качестве текущего пользователя?

    Вставка имени таблицы в запрос дает sqlite3.OperationalError: рядом с «?»: Синтаксическая ошибка

    Android: View.setID (int id) программно – как избежать конфликтов идентификаторов?

    C ++: Когда (и как) называются глобальные статические конструкторы C ++?

    Где находится папка запуска (автозапуск) в Windows 8

    Форматирование удваивается для вывода в C #

    Установленная Java 7 в Mac OS X, но Terminal по-прежнему использует версию 6

    Давайте будем гением компьютера.