ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ - июнь / 2019
Библиотека поддержки немного изменилась с момента первоначального ответа. Теперь даже плагин Android для Gradle может автоматически генерировать PNG во время сборки. Итак, ниже представлены два новых подхода, которые должны работать в наши дни. Вы можете найти больше информации здесь:
Поколение PNG
Gradle может автоматически создавать изображения PNG из ваших ресурсов во время сборки. Однако при таком подходе поддерживаются не все элементы xml . Это решение удобно, потому что вам не нужно ничего менять в коде или в build.gradle. Просто убедитесь, что вы используете Android Plugin 1.5.0 или выше и Android Studio 2.2 или выше .
Я использую это решение в своем приложении и отлично работает. Дополнительный флаг build.gradle не требуется. Никаких взломов не требуется. Если вы перейдете в / build / generated / res / pngs / ..., вы увидите все сгенерированные PNG.
Итак, если у вас есть простой значок (поскольку поддерживаются не все элементы xml), это решение может сработать для вас. Просто обновите Android Studio и плагин Android для Gradle.
Библиотека поддержки
Возможно, это решение, которое подойдет вам. Если вы пришли сюда, это означает, что ваша Android Studio не генерирует PNG автоматически. Итак, ваше приложение дает сбой.
Или, может быть, вы вообще не хотите, чтобы Android Studio генерировала PNG.
В отличие от этого «автоматического создания PNG», которое поддерживает подмножество элементов XML, это решение поддерживает все теги xml. Итак, у вас есть полная поддержка вашего векторного рисования.
Вы должны сначала обновить свой build.gradle, чтобы поддерживать его:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:23.2.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
}
А затем используйте app:srcCompat
вместо android:src
при загрузке VectorDrawables
. Не забывай об этом.
Для TextView
, если вы используете androidx
версию библиотеки поддержки, вы можете использовать app:drawableLeftCompat
(или справа, сверху, снизу) вместоapp:drawableLeft
В случае CheckBox
/ RadioButton
используйте app:buttonCompat
вместо android:button
.
Если вы не используете androidx
версию библиотеки поддержки и вашminSdkVersion
она 17
или выше, или вы используете кнопку, вы можете попытаться установить программно через
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
ОБНОВЛЕНИЕ - июль / 2016
Они снова включили VectorDrawable в
библиотеке поддержки Android 23.4.0.
Для пользователей AppCompat мы добавили API - интерфейс для повторного включения поддержки векторных чертежей из ресурсов (поведение, описанное в 23.2) через AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - имейте в виду, что это все еще может вызвать проблемы с использованием памяти и проблемы с обновлением экземпляров конфигурации, поэтому по умолчанию он отключен.
Может быть , build.gradle
настройка устарела, и вам просто нужно включить ее в надлежащих действиях (однако необходимо проверить).
Теперь, чтобы включить его, вы должны сделать:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Оригинальный ответ - апрель 2016 г.
Я думаю, это происходит потому, что Support Vector был отключен в последней версии библиотеки: 23.3.0
Согласно этому посту :
Для пользователей AppCompat мы решили удалить функциональность, позволяющую использовать векторные чертежи из ресурсов на устройствах до Lollipop, из-за проблем, обнаруженных в реализации в версии 23.2.0 / 23.2.1 (НОМЕР 205236) . Использование app: srcCompat и setImageResource () продолжает работать.
Если вы посетите вопрос ISSUE 205236 , кажется, что они будут включены в будущем, но проблема с памятью будет исправлена не скоро:
В следующем выпуске я добавил дополнительный API, в котором вы можете повторно включить поддержку VectorDrawable, которая была удалена. Он имеет те же оговорки, что и раньше (использование памяти и проблемы с обновлением конфигурации).
У меня была аналогичная проблема. Итак, в моем случае я снова вернул все значки, которые используют векторные изображения из ресурса, в изображения PNG (поскольку проблема с памятью будет возникать даже после того, как они предоставят возможность снова включить ее).
Не уверен, что это лучший вариант, но, на мой взгляд, он исправляет все сбои.