Vector Drawable ne peut pas être chargé correctement dans Android API 19 avec l'aide de Support Library (23.4.0)

Récemment, je souhaite utiliser Vector Drawable pour gérer toutes les icônes. Vector Drawable fonctionne bien sur Android API 21+ mais quand j'ai essayé de l'utiliser sur un de mes périphériques de test [Amazon KFTHWI Android 4.4.3 API 19], toutes les icônes ne peuvent pas être chargées du tout!

J'ai suivi les conseils Here and Here . Mais ça ne marche pas …

Voici ma configuration:

Dans le fichier de script de projet Gradle:

buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath ... } } 

Donc, ma version de plugin gradle devrait être 2.0+

Dans le fichier de script de gradle de module principal:

 android{ ... defaultConfig{ ... vectorDrawables.useSupportLibrary = true ... } } dependencies{ ... compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:gridlayout-v7:23.4.0' ... } 

Ce module principal contient l'application. La raison pour laquelle je compile la bibliothèque gridlayout-v7 est parce que j'utilise des Gridlayouts dans l'application.

Voici ma mise en œuvre:

Parce que j'ai besoin de générer des vues en fonction des données que j'ai reçues, j'ai configuré la source d'image dans le code java.

 ImageView icon = new ImageView(this); icon.setImageResource(R.drawable.ic_lock_black_24dp); 

Ic_lock_black_24dp.xml est généré à partir de la bibliothèque d'éléments matériels dans Vector Asset Studio.

Mes attentes:

Je crois que ma configuration dans mon fichier de script de gradle de module principal empêchera Android Studio de générer des Pngs pour les vecteurs et permettra à Android de générer Drawables for Vectors directement au moment de l'exécution.

Mais je ne suis que partiellement correct … Ma configuration empêche effectivement Android Studio de générer Pngs tout en construisant. MAIS mon ancien périphérique Android [API 19] ne peut pas générer de Drawables from Vectors !! Donc il n'y a pas d'icônes dans l'application maintenant …

Voici les exceptions: [Amazon KFTHWI Android 4.4.3 API 19]

 W/ImageView:Unable to find resource:2130837702 android.content.res.Resources$NotFoundException: File res/drawable/ic_lock_black_24dp.xml from drawable resource ID#0x7f0200c6 at android.content.res.Resources.loadDrawable(Resources.java:2206) at android.content.res.Resources.getDrawable(Resources.java:707) at android.widget.ImageView.resolveUri(ImageView.java:651) at android.widget.ImageView.onMeasure(ImageView.java:774) at android.view.View.measure(View.java:17038) at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:17038) at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1052) at android.widget.LinearLayout.onMeasure(LinearLayout.java:590) at android.view.View.measure(View.java:17038) at android.support.v7.widget.GridLayout.measureChildWithMargins2(GridLayout.java:896) at android.support.v7.widget.GridLayout.measureChildrenWithMargins(GridLayout.java:906) at android.support.v7.widget.GridLayout.onMeasure(GridLayout.java:945) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:17038) at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1273) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.widget.ScrollView.onMeasure(ScrollView.java:373) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) at android.view.View.measure(View.java:17038) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5191) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2346) at android.view.View.measure(View.java:17038) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2004) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1176) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1368) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1057) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5857) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:815) at android.view.Choreographer.doCallbacks(Choreographer.java:628) at android.view.Choreographer.doFrame(Choreographer.java:598) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:801) at android.os. 

Ironnically, toutes les icônes vont bien s'afficher si je n'utilise pas AppCompat Support Library, mais je sais que c'est parce que Android Studio génère Pngs en cours de construction. Je peux même trouver ces Pngs dans l'APK.

Mon problème:

Maintenant, je souhaite encore bénéficier de Vector Drawable dans les anciens périphériques Android, ce qui signifie que j'essaye toujours d'éviter d'utiliser Pngs … Quelqu'un pourrait-il me donner des conseils ou me dire dans quelles étapes j'ai fait quelque chose de mal?

2 Solutions collect form web for “Vector Drawable ne peut pas être chargé correctement dans Android API 19 avec l'aide de Support Library (23.4.0)”

Vous devez déclarer new AppCompatImageView(this) . Lorsque vous créez des vues manuellement, vous devez ajouter le préfixe AppCompat .

Il existe une bibliothèque prenant en charge api 14+ pour VectorDrawable et AnimatedVectorDrawable que j'utilise: https://github.com/wnafee/vector-compat

  • Android VectorDrawable ne s'affiche pas dans la mise en page
  • Recherche d'un "PaintCode" pour Android
  • Changer la couleur de remplissage sur un actif vectoriel dans Android Studio
  • Rendu SVG avec OpenGL (et OpenGL ES)
  • Le sélecteur de couleur pour l'image vectorielle ne fonctionne pas
  • Vector Asset Studio importe des fichiers colorés .svg en noir et blanc
  • coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.