我已阅读解释Android中的VectorDrawables的答案和博客文章,以及如何使用它们代替不同像素密度的PNG文件。
我已经看到有一个android:tint
XML属性可用于ImageButton
s和类似的View
s,但我希望能够将色调应用于我用作菜单项的矢量图标,因为您无法在菜单项上使用android:tint
。
One blog post解释说,有色的drawables可以像这样创建:
<?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
引用的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
属性更改为我想要的颜色,但除此之外,有没有办法以非编程方式执行此操作?
目前这是不可能的。请考虑在Android问题跟踪器中主演此feature request。