ULTIMO AGGIORNAMENTO - giugno / 2019
La libreria di supporto è leggermente cambiata rispetto alla risposta originale. Ora, anche il plug-in Android per Gradle è in grado di generare automaticamente il PNG in fase di compilazione. Quindi, di seguito sono riportati due nuovi approcci che dovrebbero funzionare in questi giorni. Puoi trovare maggiori informazioni qui:
Generazione PNG
Gradle può creare automaticamente immagini PNG dalle tue risorse in fase di costruzione. Tuttavia, in questo approccio, non tutti gli elementi xml sono supportati . Questa soluzione è comoda perché non è necessario modificare nulla nel codice o nel file build.gradle. Assicurati solo di utilizzare Android Plugin 1.5.0 o versioni successive e Android Studio 2.2 o versioni successive .
Sto usando questa soluzione nella mia app e funziona bene. Nessun flag build.gradle aggiuntivo necessario. Non sono necessari hack. Se vai a / build / generated / res / pngs / ... puoi vedere tutti i PNG generati.
Quindi, se hai qualche semplice icona (poiché non tutti gli elementi xml sono supportati), questa soluzione potrebbe funzionare per te. Aggiorna il tuo Android Studio e il tuo plug-in Android per Gradle.
Libreria di supporto
Probabilmente, questa è la soluzione che funzionerà per te. Se sei arrivato qui, significa che il tuo Android Studio non sta generando automaticamente i PNG. Quindi, la tua app si arresta in modo anomalo.
O forse non vuoi affatto che Android Studio generi alcun PNG.
A differenza della "generazione Auto-PNG" che supporta un sottoinsieme di elementi XML, questa soluzione supporta tutti i tag xml. Quindi, hai pieno supporto per il tuo disegno vettoriale.
Devi prima aggiornare il tuo build.gradle per supportarlo:
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
}
E poi, usa app:srcCompat
invece che android:src
durante il caricamento VectorDrawables
. Non dimenticarlo.
Perché TextView
, se stai usando la androidx
versione della libreria di supporto, puoi usare app:drawableLeftCompat
(o destra, in alto, in basso) invece diapp:drawableLeft
In caso di CheckBox
/ RadioButton
, usa app:buttonCompat
invece di android:button
.
Se non stai utilizzando la androidx
versione della libreria di supporto e la tua minSdkVersion
è 17
o superiore o stai utilizzando un pulsante, puoi provare a impostare a livello di programmazione tramite
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
AGGIORNAMENTO - luglio / 2016
Hanno riattivato quel VectorDrawable nella
libreria di supporto Android 23.4.0
Per gli utenti di AppCompat , abbiamo aggiunto un'API opt-in per riattivare il supporto Vector Drawables dalle risorse (il comportamento trovato nella 23.2) tramite AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - tieni presente che questo può ancora causare problemi con l'utilizzo della memoria e problemi di aggiornamento delle istanze di configurazione, quindi perché è disabilitato per impostazione predefinita.
Forse , build.gradle
l'impostazione è ormai obsoleto e basta per consentirgli di attività proprie (tuttavia, hanno bisogno di test).
Ora, per abilitarlo, devi fare:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Risposta originale - aprile 2016
Penso che ciò stia accadendo perché Support Vector è stato disabilitato nell'ultima versione della libreria: 23.3.0
Secondo questo POST :
Per gli utenti di AppCompat, abbiamo deciso di rimuovere la funzionalità che consente di utilizzare i disegni vettoriali dalle risorse sui dispositivi pre-Lollipop a causa di problemi riscontrati nell'implementazione nella versione 23.2.0 / 23.2.1 (EDIZIONE 205236) . Utilizzando app: srcCompat e setImageResource () continua a funzionare.
Se visiti il problema NUMERO 205236 , sembra che verranno abilitati in futuro, ma il problema della memoria non verrà risolto presto:
Nella prossima versione ho aggiunto un'API di attivazione in cui è possibile riattivare il supporto di VectorDrawable che è stato rimosso. Viene fornito con gli stessi avvertimenti di prima (utilizzo della memoria e problemi con l'aggiornamento della configurazione).
Ho avuto un problema simile. Quindi, nel mio caso, ho ripristinato di nuovo tutte le icone che utilizzano il disegno vettoriale dalla risorsa alle immagini PNG (poiché il problema di memoria continuerà a verificarsi anche dopo che forniscono un'opzione per abilitarlo di nuovo).
Non sono sicuro che questa sia l'opzione migliore, ma a mio parere risolve tutti gli arresti anomali.