29

在工具栏中使用新的 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.ToolbarJB (16) 上的 Android 支持库 v23.2。

4

1 回答 1

38

事实证明这很容易。说,你有矢量 drawable vd_trash_24dp

描述 MenuItem 不能直接使用 VectorDrawable 来处理android:icon。好像也无视了app:srcCompat

但。据我们所知;)

AppCompat 支持在另一个可绘制容器(例如 StateListDrawable、InsetDrawable、LayerDrawable、LevelListDrawable 和 RotateDrawable)中引用矢量可绘制对象时加载它们

让我们尝试一下,好吗?

创建 StateListDrawablevd_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(). 但是谁需要那个 %)

于 2016-03-05T13:06:52.820 回答