Подтвердить что ты не робот

Библиотека поддержки 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+? В статье библиотеки поддержки не упоминается способ выполнения этой миграции

4b9b3361

Ответ 1

Я нашел решение.

Вам нужно добавить поддержку VectorDrawable в свою активность вручную.

попробуйте это в своей деятельности:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

Вы должны проверить эту запись в блоге для получения дополнительной информации.

Ответ 2

Вы можете использовать следующий метод для рисования векторного чертежа в формате до 5.0.

Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);

Ответ 3

другое возможное решение, что я нашел до сих пор

ResourcesCompat.getDrawable(context.resources, resId, theme)

и контекст должен быть вашей деятельностью (но не контекстом приложения)