Библиотека поддержки Android: getDrawable независимо, если вектор или нет
При работе с Android >= 5.0,
Drawable d = getResources().getDrawable(R.drawable.icon)
Правильно анализирует XML и возвращает допустимый допустимый. Но при использовании новой Библиотеки векторной библиотеки с возможностью рисования (версия 23.4, Gradle 2.1.2) этот код разбивается под Android 4.
android.content.res.Resources $NotFoundException
...
Вызвано: org.xmlpull.v1.XmlPullParserException: двоичная строка XML файла # 2: недопустимый вектор тегов
Решение заключалось бы в использовании
Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);
Но это сбой, если ресурс не является векторным ресурсом:
java.io.FileNotFoundException: поврежденный двоичный файл XML
Итак, какой код нужно использовать вместо первой строки, чтобы он работал с Android 4 и Android 6 и с векторными и не векторными чертежами - например, во всех случаях эта строка использовалась в проекте Android 5.0+? В статье библиотеки поддержки не упоминается способ выполнения этой миграции
Ответы
Ответ 1
Я нашел решение.
Вам нужно добавить поддержку VectorDrawable в свою активность вручную.
попробуйте это в своей деятельности:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
Вы должны проверить эту запись в блоге для получения дополнительной информации.
Ответ 2
Вы можете использовать следующий метод для рисования векторного чертежа в формате до 5.0.
Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
Ответ 3
другое возможное решение, что я нашел до сих пор
ResourcesCompat.getDrawable(context.resources, resId, theme)
и контекст должен быть вашей деятельностью (но не контекстом приложения)