Je remplace toutes mes icônes par VectorDrawables dans la mesure du possible. Mais j'ai remarqué que certains d'entre eux ne s'affichent pas correctement sur l'API 23 et que la couleur semble saigner. L'un de ces 3 rend bien. Voici une capture d'écran d'un projet isolé J'ai créé:
Semble parfaitement bien sur API 21:
Le code source de l'exemple d'application est ici
J'utilise AppCompat 24.0.0, app: srcCompat sur ImageView et j'ai défini vectorDrawables.useSupportLibrary = true. J'ai également essayé AppCompat 23.4.0 avec la cible 23. Cependant, si je supprime appCompat et que je mets minSdkVersion à 21 et que j'utilise le support vectoriel natif, les résultats ne changent pas. Le IDE ne se plaint pas que quoi que ce soit ne soit pas pris en charge. Comment savoir quel est le problème? Est-ce un bug de plate-forme? Y a-t-il des solutions?
J'ai eu exactement le même problème sur l'API 23 uniquement. Je définissais ma source ImageView dynamiquement, plutôt qu'en XML. J'ai réalisé que le problème était que je faisais:
Drawable show = getContext().getResources().getDrawable(resourceId);
Quand j'aurais dû faire:
Drawable show = AppCompatResources.getDrawable(getContext(), resourceId);
J'espère que ça aidera quelqu'un!
Tout d'abord, je ne suis pas un développeur Android, je suis un concepteur aidant avec certains actifs de production dans Android Studio.
Nous avons commencé à rencontrer les mêmes problèmes avec certains de nos dessinables vectoriels de 22 à 24.
(J'ai mis à jour mon projet pour utiliser Nexus 6 API 23 et compiler la version 24, construire la version 24, le SDK cible 24. Ensuite, mes drawables semblaient fermer les chemins et ajouter des remplissages similaires à ce qui se passe ci-dessus.)
Testé
J'ai accès à Adobe Illustrator CC (19.2.1) et j'ai exploré diverses options de chemin sur un objet avec un trait. Tout, de l'expansion des chemins aux remplissages, la combinaison de chemins, la création de chemins composés, la fermeture de chemins, etc.
Options de conversion
Le convertisseur en ligne SVG vers Drawable ( http://inloop.github.io/svg2Android/ ) a une option, " Bake se transforme en chemin (expérimental)," et je l'ai sélectionné et bien qu'il ait amélioré le rendu, ce n'était PAS encore parfait.
Solution potentielle
Ensuite, je suis retourné dans Illustrator et j'ai essayé " Enregistrer sous" SVG contre " Exporter" comme SVG. Je ne sais pas quelles sont les différences d'Adobe Illustrator entre les deux paramètres, mais ils crachent des données XML SVG légèrement différentes.
J'ai ensuite pris le nouveau "Save As SVG" et l'ai déposé dans ce convertisseur Drawable en ligne: http://inloop.github.io/svg2Android/
Et ces options ont été vérifiées:
Le nouveau XML Drawable qu'il a renvoyé semble fonctionner et s'afficher correctement.
Je ne sais pas si cela fonctionnera avec d'autres graphiques vectoriels qui ont des traits, des formes et des remplissages, mais j'ai pensé partager mon expérience. Ce n'est pas une vraie solution, car il semble que ce soit un bogue dans le nouveau SDK Android, et il l'avait déjà pris en charge auparavant, mais cela peut être une solution temporaire possible pour certaines personnes.
Lisez ce support pour une explication plus détaillée https://medium.com/androiddevelopers/using-vector-assets-in-Android-apps-4318fd662eb9
TL; DR
Android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Utilisation
app:srcCompat
app:buttonCompat
app:drawableStartCompat...
Au lieu de
Android:src
Android:button
Android:drawableStart
Par programme
AppCompatResources.getDrawable(context, R.drawable.my_drawable)