Vector Drawables работают из коробки на Android 4+ - PullRequest
0 голосов
/ 04 ноября 2018

Я использую векторные рисунки на Android 4+ из XML и код без проблем.

Настройка: Android Gradle Plugin 3.2.1, Android Studio 3.2.1, Gradle 4.10.1, библиотека поддержки Android-x с включенным Jetifier.

Пример использования:

  • app:srcCompat="@drawable/some_vector_drawable"
  • android:drawableLeft="@drawable/some_vector_drawable"
  • view.setBackgroundResource(R.drawable.some_vector_drawable)

Во многих официальных или менее официальных блогах или сообщениях о переполнении стека упоминается:

  • android.defaultConfig.vectorDrawables.useSupportLibrary = true в build.gradle

  • и / или: AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) из кода

но мои векторные графические объекты работают нормально безо всякого из них.

Есть ли официальная, окончательная документация по этому вопросу? Нужны ли эти флаги?

Единственное, что я замечаю, это предупреждение в Android Studio, которое я игнорирую:

, чтобы использовать векторный формат с возможностью рисования, вам нужно установить defaultConfig.vectorDrawables.useSupportLibrary = true

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Без:

android.defaultConfig.vectorDrawables.useSupportLibrary = true

в build.gradle, PNG генерируются для каждого нарисованного вектора и становятся частью результирующего файла .apk.

С указанным выше флагом возможно следующее:

  • app:srcCompat="@drawable/some_vector_drawable" в макете xml
  • android:icon="@drawable/some_vector_drawable" в меню xml
  • imageView.setImageResource(R.drawable.some_vector_drawable) в коде

    (но вектор для рисования должен быть одним вектором (т.е. начинаться с <vector))

  • получение VectorDrawable из кода:

    Drawable vectorDrawable = VectorDrawableCompat.create (resources, R.drawable.some_vector_drawable, null)

    Затем его можно использовать как обычный инструмент рисования (например: imageView.setImageDrawable(vectorDrawable))

С обоими:

android.defaultConfig.vectorDrawables.useSupportLibrary = true

& AppCompatDelegate.setCompatVectorFromResourcesEnabled (true)

вместе VectorDrawables работают так же, как если бы они были родными на Android 4+. Тем не менее, Google предупреждает, что использование AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) может вызвать проблемы с памятью или проблемы с объектом Configuration (у меня такого не было).

0 голосов
/ 04 ноября 2018

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

Это также говорит это:

Android Studio 1.4 представила ограниченную поддержку совместимости векторных рисунков путем создания файлов PNG во время сборки.

Это неясно, и примечания к выпуску для версии 1.4 фактически не упоминают о векторных Drawables. Однако кажется, что когда вы не говорите Gradle, что хотите использовать библиотеку поддержки, он вместо этого будет генерировать PNG-файлы, зависящие от плотности, для каждого вектора и, вероятно, использовать их на старых устройствах вместо векторов.

Если это правда, вам действительно следует использовать библиотеку поддержки. Создание PNG для каждого DPI приведет к значительному увеличению размера вашего приложения. Я почти уверен, что библиотека поддержки генерирует PNG во время выполнения для устройств, которые не поддерживают векторы, то есть APK остается маленьким.

...