通过XML着色Android矢量菜单图标

Far*_*deh 5 android android-xml android-menu android-vectordrawable

我已经阅读了答案和博客文章,这些文章解释了Android中的VectorDrawables以及如何使用它们代替不同像素密度的PNG文件。

我已经看到有一个android:tintXML属性可以在ImageButtons和相似的Views上使用,但是我希望能够对用作菜单项的矢量图标应用色彩,因为您无法android:tint在菜单项上使用。

一篇博客文章解释说,可以像这样创建着色的可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_action_something"
    android:tint="@color/color_action_icons_tint"/>
Run Code Online (Sandbox Code Playgroud)

其中上面的XML文件是着色的可绘制对象,所引用的可绘制的贯穿对象src是原始矢量(黑色),并且tint是图标将被着色到的颜色。

但是,以上内容对我不起作用,给我以下错误:

android.content.res.Resources$NotFoundException: File res/drawable/ic_chevron_left_white_24dp.xml from drawable resource ID #0x7f02007e
    at android.content.res.Resources.loadDrawableForCookie(Resources.java:3735)
    at android.content.res.Resources.loadDrawable(Resources.java:3603)
    at android.content.res.Resources.getDrawable(Resources.java:1852)
    at android.content.Context.getDrawable(Context.java:408)
    at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
    at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:352)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:181)
    at ...
 Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: <bitmap> requires a valid src attribute
    at android.graphics.drawable.BitmapDrawable.updateStateFromTypedArray(BitmapDrawable.java:761)
    at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:726)
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1150)
    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1063)
    at android.content.res.Resources.loadDrawableForCookie(Resources.java:3719)
    at android.content.res.Resources.loadDrawable(Resources.java:3603) 
    at android.content.res.Resources.getDrawable(Resources.java:1852) 
    at android.content.Context.getDrawable(Context.java:408) 
    at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26) 
    at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:352) 
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193) 
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:181) 
    at ...
Run Code Online (Sandbox Code Playgroud)

编辑:这是我的drawable ic_chevron_left_white_24dp.xml

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_chevron_left_black_24dp"
    android:tint="@color/white"/>
Run Code Online (Sandbox Code Playgroud)

上面的文件和引用的文件都存在。


此外,通过上述操作,我的IDE(Android Studio)显示以下警告:

渲染问题:需要有效的“ src”属性

这就引出了一个问题-如何设置XML矢量可绘制菜单图标的颜色?

我知道我可以创建矢量的副本并将fillColor属性更改为所需的颜色,但是除此之外,有没有办法以非编程方式进行呢?

Mar*_*ark 0

目前这是不可能的。请考虑在 Android 问题跟踪器中为此功能请求加注星标。