通过XML调整Android矢量菜单图标的色调

5

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

我发现在ImageButton和类似的View上可以使用android:tint XML属性,但是我想对我用作菜单项的矢量图标应用色调,因为您无法在菜单项上使用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"/>

以上 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 ...

编辑:这是我的可绘制文件 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"/>

以上两个文件以及相关文件都存在。


此外,在上述情况下,我的IDE(Android Studio)会显示以下警告:

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

这使我产生了一个问题——如何给XML矢量图形式的菜单图标上色?

我知道我可以创建矢量图形的副本并将fillColor属性更改为我想要的颜色,但除此之外,是否有一种非编程的方法来实现它?


你可能缺少一个文件...如果你有它所需的文件,ResourceNotFound异常很容易修复。 - OneCricketeer
@cricket_007 请看我的修改。 - Farbod Salamat-Zadeh
@cricket_007 你说缺失的白色可绘制对象,但我在我的编辑中已经展示了它是什么。我在白色可绘制文件中引用了黑色可绘制对象,而且黑色可绘制对象也存在。 - Farbod Salamat-Zadeh
你看过这个吗?https://developer.android.com/training/material/drawables.html#DrawableTint - OneCricketeer
@cricket_007 是的,但正如我在问题中解释的那样,我似乎无法在菜单项上使用android:tint属性。我应该如何在XML中为菜单图标着色? - Farbod Salamat-Zadeh
显示剩余6条评论
1个回答

0

目前还无法实现。请考虑在Android问题跟踪器中给这个功能请求点赞。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接