Come utilizzare disegni vettoriali in API Android inferiore 21?

Sto lavorando su un progetto Android e ho scelto di <vector> visualizzare l'icona perché è adattabile e dynamic, tuttavia, posso solo eseguire questa applicazione sui dispositivi Android che hanno API 21 o più. La mia domanda è come posso usare <vector> sulla versione Android più bassa, vale a dire API 14 o tipo di. Grazie!

 <!-- 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>` 

  • È ansible modificare dynamicmente il riepilogo di EditTextPreference in Android?
  • Adattatore personalizzato di listview con filter Android
  • Android, non è ansible caricare immagini utilizzando WebView
  • Imansible call getSupportFragmentManager () dall'attività
  • Lo studio Android non viene installato anche se JDK 8 è installato
  • Centro di ritaglio Android di Bitmap
  • Ottenere la posizione corrente con GPS E WIFI
  • Problemi con la camera Samsung Galaxy S5
  • Ridurre la dimensione di Bitmap ad alcuni pixel specificati in Android
  • La gestione dei database ha smesso di funzionare su Android 2.2.1 (Desire HD 1.72.405.3)
  • getLastKnownLocation restituisce null
  • Come limitare il dispositivo Android per non aprire un sito specifico egyoutube, facebook
  • 9 Solutions collect form web for “Come utilizzare disegni vettoriali in API Android inferiore 21?”

    I Vector Drawables sono ora compatibili con la versione precedente, è solo una questione di aggiornamento della versione di gradle a 1.4.0-beta3 o superiore e aggiornare l'IDE:

    Siamo inoltre entusiasti di offrire una compatibilità all'indietro per i tuoi asset vettoriali in Android Studio 1.4. Una volta che hai un'image vectorDrawable nel tuo res / drawable, il plugin Gradle genererà automaticamente immagini PNG raster per il livello API 20 e inferiore durante il tempo di costruzione. Ciò significa che devi solo aggiornare e mantenere l'asset vettoriale per il tuo progetto di app e Android Studio può occuparsi del process di conversione delle immagini.

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

    Con la libreria di supporto 23.2, il vero supporto per Vector Drawables è stato fornito fino a API v7. Si raccomanda di distriggersre la versione precedente del supporto, che ha reso PNG durante la fase di build, aggiungendo

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

    al build.gradle .

    L'implementazione è abbastanza semplice. C'è un nuovo attributo srcCompat su Drawables:

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

    Vector Drawables sono supportti anche in casi come la properties; drawableLeft di TextView.

    Fonte: annuncio della biblioteca

    Tuttavia, vorrei comunque raccomandare qualcosa come la biblioteca Iconics , AndroidSVG o un'altra icona di carattere o di una soluzione SVG per il pieno supporto stand-SVG.

    VectorDrawable è supportto pre-Lollipop tramite la libreria di supporto , ma il modo per utilizzarli dipende dalla versione della libreria di supporto che hai. E potrebbe non funzionare in tutti i casi.

    Ho fatto questo diagramma per aiutare (valido per la Libreria di Supporto 23.4.0 a – alless – 25.1.0).

    Cheatsheet di VectorDrawable

    è necessario utilizzare il supporto Reporter 30+ se si utilizza lo studio android e ha bisogno di una libreria di supporto Android 23.2.1+ se si utilizza Eclipse.

    controllare il tuo build.gradle (progetto) se utilizza la versione 2.0+ aggiungi il codice sotto nel tuo build.gradle (app)

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

    e: se si utilizza la versione 1.5, aggiungere nel tuo build.gradle (app)

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

    qui è il codice di esempio per l'uso icona vettoriale:

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

    o

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

    Vector Drawables sono supportti anche in casi come la properties; drawableLeft di TextView. ma ha funzionato api 22+ per me e ancora non so come functionrà per api bassa.

    Tieni anche presente se vuoi essere compatibile sotto API 21:

    • non è ansible utilizzare la properties; android:background in xml o View.setBackgroundResource() . È necessario utilizzare il View.setBackground() .
    • non puoi utilizzare svg-s in StateListDrawable xml-s o altri disegni xml, devi generarli in modo programmato.
    • non è ansible utilizzare svg-s in caso di notifica.

    Ho trovato la soluzione! Per chi cerca la soluzione con TextView e altri attributi dello spazio dei nomi "android". Innanzitutto è necessario:

     android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

    E nella class applicativa definire questo:

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

    Adesso puoi utilizzare l' app:srcCompat="@drawable/ic_add" ma se si tenta di utilizzare android:background= o android:drawableLeft= si blocca l'applicazione con l'exception "Error inflating".

    Possiamo creare ic_add_wrapped.xml disegnabile per questo vector:

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

    E adesso functionrà con qualsiasi properties; come il drawableLeft o lo background. Appena impostato android:drawableLeft="ic_add_wrapped.xml" . Apprezzo molto l'aiuto di Sergey Zabelnikov che mi ha parlato di questa soluzione: https://stackoverflow.com/users/4252851/sergey-zabelnikov

    Quando è necessario aggiungere in modo programmato l'image SVG, è ansible eseguirla in questo modo:

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

    Solo per completare la risposta di @ 2Dee:

    VectorDrawable non può essere utilizzato su API 20 e inferiore. Il metodo ufficiale genera png, che poi diventa BitmapDrawables, che rompe l'idea della grafica vettoriale.

    Personalmente preferisco i vettori xml su svg:

    • tali grafici possono essere esportte direttamente da Illustrator o da altri software popolari
    • svg support correttamente le trasformazioni, il text, le maschere e altre cose
    • vera grafica vettoriale scattabile su tutte le piattaforms
    • size più piccole e costruzioni più veloci

    Per utilizzare la grafica vettoriale puoi provare https://github.com/BigBadaboom/androidsvg . È un lettore svg e ImageView compatibile con svg.

    Ho avuto un problema in cui le mie immagini vettoriali verrebbero visualizzate, ma sarebbero completamente nere, questo è dovuto ad un problema in cui non è ansible fare riferimento alle risorse di colore nel file xml vettoriale.

    Quindi, invece di @color/primaryColorDark devi usare il colore reale, ad esempio #212121

    Se si utilizza Android Studio 3.0.0 è ansible impostare

     android.enableAapt2=false 

    in gradle.properties

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

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.