Comment utiliser les jeux vectoriels dans Android API inférieur 21?

Je travaille sur un projet Android et j'ai choisi <vector> pour afficher l'icône car il est adaptable et dynamique, mais je peux simplement exécuter cette application sur les périphériques exécutés Android qui ont API 21 ou plus. Ma question est de savoir comment puis-je utiliser <vector> sur la version Android inférieure, c'est-à-dire l'API 14 ou une sorte de. Merci!

 <!-- drawable/ic_android_debug_bridge.xmlxml --> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="48dp" android:width="48dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:fillColor="@color/primaryColorDark" android:pathData="M15,9A1,1 0 0,1 14,8A1,1 0 0,1 15,7A1,1 0 0,1 16,8A1,1 `0 0,1 15,9M9,9A1,1 0 0,1 8,8A1,1 0 0,1 9,7A1,1 0 0,1 10,8A1,1 0 0,1 9,9M16.12,4.37L18.22,2.27L17.4,1.44L15.09,3.75C14.16,3.28 13.11,3 12,3C10.88,3 9.84,3.28 8.91,3.75L6.6,1.44L5.78,2.27L7.88,4.37C6.14,5.64 5,7.68 5,10V11H19V10C19,7.68 17.86,5.64 16.12,4.37M5,16C5,19.86 8.13,23 12,23A7,7 0 0,0 19,16V12H5V16Z" /></vector>` 

  • Puis-je souligner le texte dans une mise en page Android?
  • Ajouter des icônes au tiroir de navigation Android?
  • Comment créer des jeux vectoriels pour Android?
  • Ajouter des vues dans un ordre spécifique et stocker cet ordre
  • Nine-patch versus graphiques vectoriels
  • Carte d'image Android. - afficher un .svg et l'utiliser comme carte d'image (zones tactiles)
  • Ajouter des icônes au tiroir de navigation Android?
  • Ajouter des vues dans un ordre spécifique et stocker cet ordre
  • Puis-je souligner le texte dans une mise en page Android?
  • 9 Solutions collect form web for “Comment utiliser les jeux vectoriels dans Android API inférieur 21?”

    Les dessins vectoriels sont maintenant compatibles avec l'arrière, il suffit de mettre à niveau votre version de gradle à 1.4.0-beta3 ou supérieure et d'améliorer votre IDE:

    Nous sommes également ravis d'offrir une compatibilité ascendante pour vos actifs vectoriels dans Android Studio 1.4. Une fois que vous avez une image VectorDrawable dans votre res / drawable, le plugin Gradle générera automatiquement des images PNG raster pour le niveau API 20 et inférieur pendant le temps de construction. Cela signifie que vous avez seulement besoin de mettre à jour et de maintenir votre actif vectoriel pour votre projet d'application et Android Studio peut prendre en charge le processus de conversion d'image.

    http://android-developers.blogspot.com.uy/2015/09/android-studio-14.html

    Avec la bibliothèque de support 23.2, le véritable support de Vector Drawables a été fourni jusqu'à l'API v7. Il est recommandé de désactiver la version précédente du support, qui a rendu PNG pendant le temps de construction, en ajoutant

     // Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

    À build.gradle .

    La mise en œuvre est assez simple. Il existe un nouvel attribut srcCompat sur Drawables:

     <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_add" /> <= this is new 

    Les dessins vectoriels sont également pris en charge dans des cas comme la propriété DrawableLeft de drawableLeft .

    Source: annonce de la bibliothèque

    Cependant, je recommanderais toujours quelque chose comme la bibliothèque Iconics , AndroidSVG , ou une autre icône de police ou une solution SVG pour un support complet de SVG-standand.

    VectorDrawable est pris en charge pré-Lollipop via la bibliothèque de support , mais la façon de les utiliser dépend de la version de la bibliothèque d'assistance que vous avez. Et cela peut ne pas fonctionner dans tous les cas.

    J'ai fait ce schéma pour vous aider (valable pour la bibliothèque de support 23.4.0 à – au moins – 25.1.0).

    Cheatsheet VectorDrawable

    Vous avez besoin d'utiliser Android Support Repository 30+ si vous utilisez Android studio et besoin de la bibliothèque de support Android 23.2.1+ si vous utilisez Eclipse.

    Vérifiez votre build.gradle (projet) si vous utilisez la version 2.0+ ajouter un code ci-dessous dans votre build.gradle (application)

     // Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

    Et: si vous utilisez la version 1.5, ajoutez ci-dessous dans votre build.gradle (application)

     // Gradle Plugin 1.5 android { defaultConfig { generatedDensities = [] } // This is handled for you by the 2.0+ Gradle Plugin aaptOptions { additionalParameters "--no-version-vectors" } } 

    Voici un exemple de code pour l'utilisation de l'icône du vecteur:

     <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_add" tools:ignore="MissingPrefix" /> 

    ou

     <ImageButton android:layout_width="wrap_content" android:background="@android:color/transparent" app:srcCompat="@drawable/camera" tools:ignore="MissingPrefix" android:layout_height="wrap_content"/> 

    Les dessins vectoriels sont également pris en charge dans des cas comme la propriété DrawableLeft de drawableLeft . Mais cela m'a coûté 22 ans et je ne sais toujours pas comment cela fonctionnera pour les api bas.

    Gardez également à l'esprit si vous souhaitez être compatible sous API 21:

    • Vous ne pouvez pas utiliser la propriété android:background dans la fonction xml ou View.setBackgroundResource() . Vous devez utiliser View.setBackground() .
    • Vous ne pouvez pas utiliser svg-s dans StateListDrawable xml-s ou autres xml drawables, vous devez les générer par programme.
    • Vous ne pouvez pas utiliser svg-s en cas de notifications.

    J'ai trouvé une solution! Pour ceux qui recherchent une solution avec TextView et d'autres attributs d'espace de noms "Android". Tout d'abord, cela est nécessaire:

     android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

    Et dans la classe d'application, définissez ceci:

      @Override public void onCreate() { super.onCreate(); AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } 

    Maintenant, vous pouvez utiliser l' app:srcCompat="@drawable/ic_add" mais si vous essayez d'utiliser android:background= ou android:drawableLeft= il sera android:drawableLeft= application avec une exception "Erreur de gonflement".

    Nous pouvons créer des ic_add_wrapped.xml ic_add_wrapped.xml pour ce vecteur:

     <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_add"/> </layer-list> 

    Et maintenant, il fonctionnera avec n'importe quelle propriété comme drawableLeft ou background. Il suffit de définir android:drawableLeft="ic_add_wrapped.xml" . J'apprécie beaucoup l'aide de Sergey Zabelnikov qui m'a parlé de cette solution de contournement: https://stackoverflow.com/users/4252851/sergey-zabelnikov

    Lorsque vous devez ajouter une image SVG par programmation, vous pouvez le faire comme ceci:

     icon = VectorDrawableCompat.create(resources, R.drawable.ic_map_black_24dp, null) 

    Juste pour que la réponse de @2Dee soit complète:

    VectorDrawable ne peut pas être utilisé sur API 20 et inférieur. La méthode officielle génère pngs, qui devient BitmapDrawables, ce qui brise l'idée de graphiques vectoriels.

    Personnellement, je préfère les vecteurs xml de svg:

    • Ces graphiques peuvent être exportés directement à partir d'Illustrator ou d'autres logiciels populaires
    • Svg prend en charge les transformations, le texte, les masques et autres choses correctement
    • Graphiques vectoriels scalables vrais sur toutes les plates-formes
    • Taille plus petite et constructions plus rapides

    Pour utiliser des graphiques vectoriels, vous pouvez essayer https://github.com/BigBadaboom/androidsvg . C'est un lecteur svg et compatible avec Svg ImageView.

    J'ai eu un problème où mes images vectorielles apparaîtraient mais seraient complètement noires, cela était dû à un problème où vous ne pouvez pas référencer les ressources de couleur dans le fichier xml vectoriel.

    Ainsi, au lieu de @color/primaryColorDark vous devez utiliser la couleur réelle par exemple #212121

    Si vous utilisez Android Studio 3.0.0, vous pouvez configurer

     android.enableAapt2=false 

    Dans gradle.properties

    https://www.reddit.com/r/androiddev/comments/6mj8di/android_studio_30_canary_6_released/

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.