提供的Android个SDK图标可以设置颜色吗?

Can provided Android SDK icons be set with color?

AndroidSDK提供以下图标。

有没有办法为那些设置颜色.. 如果可能的话,如何设置?

    <ImageView
        android:id="@+id/share_button"
        style="@style/IconNav"
        android:src="@android:drawable/ic_menu_share"/>

    <ImageView
        android:id="@+id/bookmark_button"
        style="@style/IconNav"
        android:src="@android:drawable/ic_input_get"/>

更新

完全刷新项目后,发现 Xml 中的 tint 属性起到了作用。

For the short answer

.. this is the solution that worked for me - adding the property to the ImageView xml:

    android:tint="@color/grass_dark"

@goldenb 的回答是一个彻底的 运行 通过不同的方法来解决这个问题,所以我把那个标记为答案。

您可以使用带有色调的位图。将其添加到您的可绘制文件夹中。

ic_input_get_colored.xml :

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@android:drawable/ic_input_get"
        android:tint="@color/yourDesiredColor"/>

您确实可以使用色调来改变 ImageView 的颜色,但是 应该提醒您 android:tint 将始终应用于原始颜色之上。

如博主所述 danlew

  • ImageView's tint mixes the tint color with the original asset. What you want is for the tint color to take over entirely; instead it applies the tint on top of the existing color. So, for example, if the source asset is black, and you want it to be #77FFFFFF (a translucent shade of white), you'll actually end up getting that shade of white with a black background beneath it.

  • android:tint is limited to ImageView. You want to be able to tint any Drawable in any View.

一种可能的替代方法是让您使用 android ColorFilter

根据 official documentation:

A color filter can be used with a Paint to modify the color of each pixel drawn with that paint. This is an abstract class that should never be used directly.

您可以使用 ColorFilter 做很多或多或少复杂的事情,但是您如何应用它呢?

另一个简单的 example 问题是:

//White tint
imageView.setColorFilter(Color.argb(255, 255, 255, 255)); 

or

imageView.setColorFilter(ContextCompat.getColor(context,R.color.COLOR_YOUR_COLOR))

或来自 here

的 SO 中更完整的答案
ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview);
ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview);
ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview);



// we can create the color values in different ways:
redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY );
greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY );
blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY );

如果您想了解更多信息,您应该查看这些链接

setColorFilter()

Fast Android asset theming with ColorFilter

SO-Modifying the color of an android drawable