提供的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
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 );
如果您想了解更多信息,您应该查看这些链接
Fast Android asset theming with ColorFilter
SO-Modifying the color of an android drawable
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
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 );
如果您想了解更多信息,您应该查看这些链接
Fast Android asset theming with ColorFilter
SO-Modifying the color of an android drawable