【问题标题】:Tint Android vector menu icons through XML通过 XML 为 Android 矢量菜单图标着色
【发布时间】:2016-07-12 12:03:19
【问题描述】:

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

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

One blog post 解释说可以像这样创建有色可绘制对象:

<?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 文件是着色的 drawable,通过 src 引用的 drawable 是原始矢量(黑色),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 异常很容易修复,如果您拥有它说您需要的文件
  • @cricket_007 查看我的编辑。
  • @cricket_007 你说的白色drawable不见了,但我已经在我的编辑中展示了它是什么。我在白色drawable文件中引用了黑色drawable,黑色的也存在。
  • @cricket_007 是的,但正如我在问题中解释的那样,我似乎无法在菜单项上使用 android:tint 属性。如何为菜单图标在 XML 中绘制矢量着色?

标签: android android-xml android-menu android-vectordrawable


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 2020-01-11
    • 2016-05-27
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多