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
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);
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.
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)