2016-04-07 18 views
28

Stavo usando i drawable vettoriali di supporto aggiunti in Support Library 23.2 insieme a AppCompat. Stavo usando i drawable vettoriali sia con app:srcCompat sia all'interno di uno StateListDrawable così potevo usarli con android:drawableLeft per il mio TextView.AppCompat 23.3 I vettori di supporto non funzionano più?

Dall'aggiornamento alla versione 23.3.0 di AppCompat, solo i vettori in app:srcCompat funzionano. Ogni volta che vi fanno riferimento il contrario ottengo

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package.name/.MainActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class Button 
... 
Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class Button 
... 
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #14: invalid drawable tag vector 
    at android.graphics.d 

Che cosa è cambiato che ora fa sì che il mio sostegno drawable vettoriali a fallire in alcuni casi?

+0

finalmente non capisco. se voglio usare il vettore rimuovi solo vectorDrawables.useSupportLibrary = true e usando app: srcCompat o ordinari android: src? – Kenji

+0

Vedere la mia risposta qui: http://stackoverflow.com/a/37864531/3870932 –

risposta

38

Aggiornamento: Permettono di nuovo in libreria di supporto 23:

Per gli utenti AppCompat, abbiamo aggiunto un opt-in API per riattivare il supporto vettore drawable dalle risorse (il comportamento trovato in 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.

check this link: 23.4.0 available now
--------------------------------------- --------------------

Come per il release announcement for Android Support Library 23.3:

per gli utenti AppCompat, abbiamo deciso di rimuovere la funzionalità che Consentono di utilizzare i file vettoriali da risorse su dispositivi pre-Lollipop a causa di problemi riscontrati nell'implementazione nella versione 23.2.0/23.2.1 [https://code.google.com/p/android/issues/detail?id=205236, https://code.google.com/p/android/issues/detail?id=204708]. L'utilizzo di app:srcCompat e setImageResource() continua a funzionare.

Quindi questo è un cambio di comportamento previsto. Dovrai utilizzare la grafica non grafica per qualsiasi caso non gestita da srcCompat.

Se vuoi continuare a utilizzare i vettori prima di API 21, è possibile rimuovere la linea

vectorDrawables.useSupportLibrary = true 

(o equivalente se si utilizza il plug-in 1.5 Gradle come mostrato in 23.2 blog post) .

Questo farà sì che Android Studio generi PNG in fase di compilazione per app con una versione minSdk inferiore all'API 21 mentre si utilizzano i vettori su dispositivi API 21+, consentendo di mantenere lo stesso codice con 23.2.1 al costo dell'APK aggiuntivo dimensione.

+1

posso usarlo con Android Gradle Plugin 2.0.0? –

+0

@ArnavM. la versione di Gradle Plugin non cambia nulla (solo come abilita il supporto per i drawable vettoriali) – ianhanniballake

+0

@IanLake la funzione InstantRun richiede gradle 2.1.0-alpha5 .. non è possibile utilizzare generateDencities con quello? –

3

Per utilizzare i vettori come compostiDrawables (es.per TextView) senza utilizzare

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

che porta ad elevato utilizzo della memoria documentata, basta gonfiare il vettore utilizzando

Drawable drawable = AppCompatResources.getDrawable(getContext(), R.drawable.vector_resID); 
if(drawable != null) drawable.setBounds(0, 0, iconSize, iconSize); 
TextViewCompat.setCompoundDrawablesRelative(textView, null, null, drawable, null); 

Questo è il modo in cui il navDrawer funziona

13

supporto VectorDrawable per pre-lecca era aggiunto nella Support Library 23.2.0, quindi parzialmente rimosso in 23.3.0. In 23.4.0 e versioni successive (almeno 25.1.0), quella parte rimossa è tornata ma dietro a una bandiera opzionale (perché ha un prezzo).

Per riassumere: nella libreria di supporto 23.4.0 a 25.1.0, almeno, si può arrivare a lavorare VectorDrawable in alcuni casi.

Ho aiutato this diagram.

VectorDrawable cheatsheet

+1

Questo è un diagramma dolce :) –

Problemi correlati