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
Что изменилось, что в настоящее время приводит к тому, что мои векторы поддержки поддержки не работают в некоторых случаях?
- Как использовать и стилить новый AlertDialog из appCompat 22.1 и выше
- Изменить цвет панели инструментов в Appcompat 21
- NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
- Как оживить Burger в Arrow с помощью Appcompat v7 21, панели инструментов и DrawerLayout
- Строка состояния становится белой и не отображает содержимое за ней
- Как реализовать Elevation Material-Design для Pre-lollipop
- Как реализовать DrawerArrowToggle из Android appcompat v7 21 library
- Панель инструментов и контекстный ActionBar с AppCompat-v7
- не удалось разрешить com.android.support:appcompat-v7:22 и com.android.support:recyclerview-v7:21.1.2
- AppCompatActivity.onCreate можно вызывать только из одной и той же группы библиотек
- Как использовать DrawerLayout для отображения на панели ActionBar / Toolbar и в строке состояния?
- Используйте вкладку с новым ToolBar (AppCompat v7-21)
- AppCompat v7 r21 возвращает ошибку в values.xml?
Обновление: они снова 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 работать в некоторых случаях .
Я сделал эту диаграмму, чтобы помочь.
Использовать векторы как составные файлы (например, для текстового просмотра) без использования
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