web-dev-qa-db-fra.com

Comment puis-je utiliser VectorDrawable avec la barre d'outils Android?

Quelle est la bonne méthode pour utiliser le nouveau VectorDrawable dans la barre d'outils?

J'ai essayé d'utiliser le app:srcCompat élément comme illustré ci-dessous, mais rien ne s'est affiché.

<menu
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  xmlns:app="http://schemas.Android.com/apk/res-auto">
  <item
    app:srcCompat="@drawable/ic_clear"
    app:showAsAction="ifRoom" />
</menu>

J'ai ma propre disposition de barre d'outils en utilisant Android.support.v7.widget.Toolbar et Android Support Library v23.2 sur JB (16).

25
vwrynn

Il s'avère que c'est assez facile. Disons que vous avez un vecteur dessinable vd_trash_24dp.

Décrire MenuItem on ne peut pas adresser directement VectorDrawable avec Android:icon. Il semble également ignorer app:srcCompat.

Mais. Comme tout ce que nous savons ;)

AppCompat prend en charge le chargement de dessins vectoriels lorsqu'ils sont référencés dans un autre conteneur dessinable tel que StateListDrawable, InsetDrawable, LayerDrawable, LevelListDrawable et RotateDrawable

Essayons, devrions-nous?

Créer StateListDrawable vd_test_vd

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/vd_trash_24dp" />

</selector>

que

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:app="http://schemas.Android.com/apk/res-auto"
      xmlns:tools="http://schemas.Android.com/tools">
    <item Android:id="@+id/menu_action_filter"
          Android:title="@string/menu_action_filter"
          Android:icon="@drawable/vd_test_vd"
          Android:orderInCategory="100"
          app:showAsAction="always"/>
</menu>

la magie de la rue en effet.

Oui, on pourrait essayer de définir drawable au moment de l'exécution avec MenuItem.setIcon(). Mais qui a besoin de ce%)

35
vigilancer