web-dev-qa-db-ja.com

AndroidツールバーでVectorDrawableを使用するにはどうすればよいですか?

ツールバーで新しいVectorDrawableを使用する適切な方法は何ですか?

以下に示すようにapp:srcCompat要素を使用しようとしましたが、何も表示されませんでした。

<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>

私はAndroid.support.v7.widget.ToolbarとAndroid Support Library v23.2 on JB(16)を使用して独自のツールバーレイアウトを持っています。

25
vwrynn

結構簡単です。たとえば、ベクタードローアブル_vd_trash_24dp_があるとします。

MenuItemを記述すると、_Android:icon_を使用してVectorDrawableを直接アドレス指定することはできません。 _app:srcCompat_も無視しているようです。

だが。として 知っているすべて ;)

AppCompatは、StateListDrawable、InsetDrawable、LayerDrawable、LevelListDrawable、RotateDrawableなどの別のドローアブルコンテナーで参照されている場合、ベクタードローアブルの読み込みをサポートします

やってみようかな?

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>
_

より

_<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>
_

確かにストリートマジック。

はい、MenuItem.setIcon()を使用して実行時にドローアブルを設定できます。しかし、それを必要とする人は%)

35
vigilancer