DERNIÈRE MISE À JOUR - Juin / 2019
La bibliothèque de support a un peu changé depuis la réponse originale. Désormais, même le plugin Android pour Gradle est capable de générer automatiquement le PNG au moment de la construction. Voici donc deux nouvelles approches qui devraient fonctionner de nos jours. Vous pouvez trouver plus d'informations ici:
Génération PNG
Gradle peut créer automatiquement des images PNG à partir de vos ressources au moment de la construction. Cependant, dans cette approche, tous les éléments xml ne sont pas pris en charge . Cette solution est pratique car vous n'avez rien à modifier dans votre code ou dans votre build.gradle. Assurez-vous simplement que vous utilisez Android Plugin 1.5.0 ou supérieur et Android Studio 2.2 ou supérieur .
J'utilise cette solution dans mon application et fonctionne correctement. Aucun indicateur build.gradle supplémentaire n'est nécessaire. Aucun piratage n'est nécessaire. Si vous allez dans / build / generated / res / pngs / ... vous pouvez voir tous les PNG générés.
Donc, si vous avez une icône simple (puisque tous les éléments xml ne sont pas pris en charge), cette solution peut fonctionner pour vous. Mettez simplement à jour votre Android Studio et votre plugin Android pour Gradle.
Bibliothèque d'assistance
C'est probablement la solution qui fonctionnera pour vous. Si vous êtes venu ici, cela signifie que votre Android Studio ne génère pas automatiquement les PNG. Donc, votre application plante.
Ou peut-être que vous ne voulez pas du tout qu'Android Studio génère des fichiers PNG.
Contrairement à cette "génération Auto-PNG" qui prend en charge un sous-ensemble d'éléments XML, cette solution prend en charge toutes les balises xml. Ainsi, vous avez un support complet pour votre dessin vectoriel.
Vous devez d'abord mettre à jour votre build.gradle pour le prendre en charge:
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
Et puis, utilisez app:srcCompat
au lieu de android:src
lors du chargement VectorDrawables
. N'oublie pas ça.
Pour TextView
, si vous utilisez la androidx
version de la bibliothèque de support, vous pouvez utiliser app:drawableLeftCompat
(ou droite, haut, bas) au lieu deapp:drawableLeft
Dans le cas de CheckBox
/ RadioButton
, utilisez à la app:buttonCompat
place de android:button
.
Si vous n'utilisez pas la androidx
version de la bibliothèque de support et que votre version minSdkVersion
est 17
ou supérieure ou si vous utilisez un bouton, vous pouvez essayer de définir par programme via
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
MISE À JOUR - Juil / 2016
Ils ont réactivé ce VectorDrawable dans la
bibliothèque de support Android 23.4.0
Pour les utilisateurs d'AppCompat , nous avons ajouté une API opt-in pour réactiver la prise en charge de Vector Drawables à partir des ressources (le comportement trouvé dans 23.2) via AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - gardez à l'esprit que cela peut toujours causer des problèmes d'utilisation de la mémoire et problèmes de mise à jour des instances de configuration, d'où la raison pour laquelle il est désactivé par défaut.
Peut - être ,build.gradle
paramètre est maintenant obsolète et qu'il vous suffit de l'activer dans les activités appropriées (cependant, vous devez tester).
Maintenant, pour l'activer, vous devez faire:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Réponse originale - avril / 2016
Je pense que cela se produit parce que Support Vector a été désactivé dans la dernière version de la bibliothèque: 23.3.0
Selon ce POST :
Pour les utilisateurs d'AppCompat, nous avons décidé de supprimer la fonctionnalité qui vous permet d'utiliser des dessins vectoriels à partir de ressources sur des appareils pré-Lollipop en raison de problèmes rencontrés dans l'implémentation de la version 23.2.0 / 23.2.1 (ISSUE 205236) . L'utilisation de app: srcCompat et setImageResource () continue de fonctionner.
Si vous visitez le problème ISSUE 205236 , il semble qu'ils seront activés à l'avenir, mais le problème de mémoire ne sera pas résolu bientôt:
Dans la prochaine version, j'ai ajouté une API opt-in où vous pouvez réactiver le support VectorDrawable qui a été supprimé. Il est livré avec les mêmes avertissements que précédemment (utilisation de la mémoire et problèmes de mise à jour de la configuration).
J'ai eu un problème similaire. Donc, dans mon cas, j'ai rétabli toutes les icônes qui utilisent le vecteur dessiné à partir d'une ressource en images PNG (puisque le problème de mémoire continuera à se produire même après avoir fourni une option pour l'activer à nouveau).
Je ne sais pas si c'est la meilleure option, mais cela corrige tous les plantages à mon avis.