web-dev-qa-db-fra.com

Bibliothèque de support Android: getDrawable independent si vector ou non

Lorsque vous travaillez avec Android> = 5.0, 

Drawable d = getResources().getDrawable(R.drawable.icon)

Analyse correctement le XML et retourne un dessin valide. Mais lorsque vous utilisez la nouvelle bibliothèque de support vectoriel (version 23.4, version 2.1.2), ce code se bloque sous Android 4 .

Android.content.res.Resources $ NotFoundException

...

Causée par: org.xmlpull.v1.XmlPullParserException: ligne de fichier XML binaire n ° 2: vecteur de balise non valide

La solution serait d'utiliser

Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);

Mais cela se bloque si la ressource n'est pas une ressource vectorielle:

Java.io.FileNotFoundException: fichier binaire XML corrompu

Alors, quel code doit être utilisé à la place de la première ligne pour qu’il fonctionne avec Android 4 et Android 6 et avec les dessinables vectoriels et non vectoriels - par exemple. dans toutes les circonstances, cette ligne a été utilisée dans un projet Android 5.0+? L'article de la bibliothèque de support ne mentionne pas de moyen d'effectuer cette migration

20
PhilLab

Vous pouvez utiliser la méthode suivante pour obtenir un dessin de Vector Drawable dans les versions antérieures à la version 5.0.

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

J'ai trouvé la solution.

Vous devez ajouter manuellement le support VectorDrawable dans votre activité.

essayez ceci dans votre activité:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

Vous devriez vérifier cette entrée de blog pour plus d'informations.

6
jmarkstar

une autre solution possible ce que j'ai trouvé jusqu'à présent

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

et le contexte devrait être votre activité (mais pas le contexte d'application)

1
orium