Sono di fronte a un problema con la nuova compatibilità con VectorDrawables. Nella libreria di supporto 23.2 è stata introdotta una nuova funzionalità per la compatibilità con le versioni precedenti di VectorDrawables Android.Selettore Android disegnato con VectorDrawables srcCompat
Ho un ImageView a cui è assegnato un SelectorDrawable. Questo Drawable contiene diversi VectorDrawables, quindi ho pensato che dovrei usare app: srcCompat per la compatibilità. Ma non funziona sul mio Galaxy S2 con Android 4.1.2.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_gps_fixed_24dp"android:state_activated="true" android:state_selected="true"></item>
<item android:drawable="@drawable/ic_gps_not_fixed_24dp" android:state_activated="true" android:state_selected="false"></item>
<item android:drawable="@drawable/ic_gps_not_fixed_24dp" android:state_activated="false" android:state_selected="true"></item>
<item android:drawable="@drawable/ic_gps_off_24dp" android:state_activated="false" android:state_selected="false"></item>
<item android:drawable="@drawable/ic_gps_not_fixed_24dp"></item>
</selector>
Tutti i drawable sono file vettoriali xml.
Quando si utilizza questa SelectorDrawable con srcCompat ottengo questo errore:
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_gps_fixed_24dp.xml from drawable resource ID #0x7f0201c1
at android.content.res.Resources.loadDrawable(Resources.java:1951)
at android.content.res.Resources.getDrawable(Resources.java:672)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:173)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881).xml from drawable resource ID #0x7f0201c1
utilizzando Android: src è ancora peggio.
Se utilizzo uno dei drawable vettoriali con app: srcCompat funziona correttamente. Quindi immagino sia un problema con SelectorDrawable e compatibilità.
Qualcuno ha avuto lo stesso problema e ha trovato una soluzione oppure non è attualmente possibile utilizzare VectorDrawables in SelectorDrawables prima di Android 5?
I fatti in breve:
- Compile target API 23
- Supporto Libraray 23.3.0
- vectorDrawables.useSupportLibrary = true
- Gradle 2,0
Supporto per il caricamento di vettore drawable dalle risorse è stato rimosso nella versione 23.3 - https://plus.google.com/+AndroidDevelopers/posts/iTDmFiGrVne – Jahnold
Ma: "Uso di app: srcCompat e setImageResource() continua a funzionare "così app: srcCompat dovrebbe funzionare ancora in 23.3. o no? – marilion91
Sì utilizzando app: srcCompat funziona ancora in modo da poter impostare un VectorDrawable su un ImageView. Tuttavia, il caricamento dei drawable in un elenco di stati xml non funziona più purtroppo – Jahnold