ОСТАННЄ ОНОВЛЕННЯ - червень / 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 {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
А потім використовуйте 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 , щоб повторно включити підтримку Vector від ресурсів вводиться коефіцієнта (поведінка знаходиться в 23.2) через AppCompatDelegate.setCompatVectorFromResourcesEnabled (істина) - мати на увазі , що це по- , як і раніше може викликати проблеми з використанням пам'яті і проблеми з оновленням екземплярів конфігурації, отже, чому він вимкнений за замовчуванням.
Можливо , build.gradle
налаштування вже застаріло, і вам просто потрібно ввімкнути його у належних діях (однак, потрібно протестувати).
Тепер, щоб увімкнути його, потрібно зробити:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Оригінальна відповідь - квітень / 2016
Я думаю, що це відбувається, оскільки службу підтримки Vector було вимкнено в останній бібліотечній версії: 23.3.0
Відповідно до цього POST :
Для користувачів AppCompat ми вирішили видалити функціональність, яка дозволяє використовувати векторні малюнки з ресурсів на пристроях до льодяника через проблеми, виявлені у реалізації у версії 23.2.0 / 23.2.1 (ВИПУСК 205236) . Використання програми: srcCompat та setImageResource () продовжує працювати.
Якщо ви відвідаєте випуск ISSUE 205236 , схоже, вони ввімкнуться в майбутньому, але проблема з пам'яттю не буде вирішена найближчим часом:
У наступному випуску я додав API для вибору, де ви можете знову ввімкнути підтримку VectorDrawable, яку було видалено. Він поставляється з тими самими застереженнями, що і раніше (використання пам'яті та проблеми з оновленням конфігурації).
У мене була подібна проблема. Отже, у моєму випадку я знову повернув усі піктограми, які використовують вектор, який можна малювати з ресурсу, до зображень у форматі PNG (оскільки проблема з пам’яттю буде продовжуватися навіть після того, як вони нададуть можливість її повторного ввімкнення).
Я не впевнений, що це найкращий варіант, але він виправляє всі збої, на мій погляд.