Cette réponse s'appuie sur l'article AppCompat - l'Âge des Vecteurs par Chris Banes(qui travaille sur la Bibliothèque de prise en charge). Pour cette question, nous sommes à la recherche spécifiquement à la section intitulée La "magie" façon.
L'incident que vous rencontrez est parce que le Soutien de la Bibliothèque permet seulement quelques façons d'utiliser VectorDrawables par défaut, et couche-la liste n'est pas l'un d'eux.
Il existe un bloc de code que vous pouvez ajouter à la partie supérieure de votre Activité afin de permettre aux autres VectorDrawable
comme <layer-list>
:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
Remarque: l'article lié contient une faute de frappe dans cette nom de la méthode, à l'aide de "FromSources", il devrait être "FromResources" comme indiqué ci-dessus.
Vous auriez besoin d'ajouter cela à chaque Activité où vous voulez l'utiliser tel un drawable, ou peut-être l'inclure dans un BaseActivity classe que vos autres Activités s'étendent à partir.
Pour l'article, cela devrait signifier que la suite va maintenant travailler:
DrawableContainers qui font référence à d'autres un drawable ressources qui contiennent seulement un vecteur de ressources.
...StateListDrawable...InsetDrawable, LayerDrawable, LevelListDrawable et RotateDrawable.
Il convient de noter cependant, cette méthode est fortement enraciné avec le mot "peut", cela peut fonctionner, et il n'est pas activé par défaut, donc, être conscient et de vérifier qu'il est vraiment pour vous!
Maintenant, il y a effectivement une autre dimension à cette question, de crédit à d'autres utilisateurs Selim Ajimi et Raiponce Van Winkle , pour résoudre ce dans leurs réponses. <layer-list>
a certaines différences de comportement entre les API, en particulier l' width
et height
attributs de votre <item>
seulement être pris en charge dans l'API 23+. Ce n'est pas la cause de la panne, ni la cause de votre app crash veut dire que votre image ne sera pas regarder comme prévu une fois que vous avez en fonctionnement de plus tôt dans l'Api.
La suggestion de Raiponce Van Winkle semble en effet être un bon moyen pour positionner le drawable correctement à travers des Api (testé sur les API 16 et 24):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="#bdbdbd" />
<size
android:width="60dp"
android:height="60dp" />
</shape>
</item>
<item
android:drawable="@drawable/ic_library_books_black_24dp"
android:top="10dp"
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
>
</item>
</layer-list>