如何在XML中更改可绘制PNG项的颜色?

时间:2017-02-17 14:35:46

标签: android xml

我有这个xml代码:

<item
    android:id="@+id/search_id"
    android:title="Search"
    app:showAsAction="always">
    <bitmap
        android:src="@drawable/ic_search_black_24dp"
        android:tint="@color/colorAccent">
    </bitmap>
</item>

<item
    android:id="@+id/shoppingcart_id"
    android:title="Shopping Cart"
    android:icon="@drawable/ic_shopping_cart_black_24dp"
    app:showAsAction="always"></item>

它们都是黑色图标,但我想要变成红色的第一个图标。但是当我运行我的应用程序时,它并没有显示任何内容。是否可以仅使用XML从可绘制资源更改PNG文件颜色而无需在java中添加代码?

谢谢。

1 个答案:

答案 0 :(得分:1)

修改

Woops,刚刚意识到你在谈论一个菜单图标,所以,试着将你的位图包装在一个可绘制的文件中,如下所述: https://stackoverflow.com/a/39535399/7296930

解决方案取决于您的API版本。

对于API 21 +:

尝试将图标定义为另一个带有色调的drawable,并将此新drawable引用为图标(而不是&lt; bitmap&gt;标记)?

适用于API&lt; 21:

Juste使用自定义TintableImageView和自定义属性来遵循解决方案here。 您将不得不编写一些Java来定义TintableImageView小部件,但是您的drawable将仅在xml中定义,类似于:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <com.example.widgets.TintableImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/example"
        app:tint="@color/color_selector"/>

</LinearLayout>