我已经阅读了有关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
属性更改为我想要的颜色,但除此之外,是否有一种非编程的方法来实现它?
android:tint
属性。我应该如何在XML中为菜单图标着色? - Farbod Salamat-Zadeh