在XML中是否有与setColorFilter()等效的功能?

42

我想知道在View的XML中是否可以设置ColorFilter,或者唯一的方法是使用Java中的setColorFilter()

5个回答

45

有一个相关的技术叫做tint。 它不适用于View,但适用于ImageViewImageButton

如果你想在selector中使用它,这个答案对我帮助很大。


谢谢。正是我想要的——改变ImageButton的drawable颜色。 - Hong

17

您可以使用:

android:tint="@color/white"

14

10
这是不正确的。tintsetColorFilter 的作用是相同的。 - Martin Konecny
2
@MartinKonecny 是的,但是在API <21上不可用tint - Alex Dmitriev
1
@AlexeyDmitriev tint在API 1中添加。请参阅我的答案以获取文档链接。tintMode在API 21中添加。 - GDanger

5

没有XML的等效项,但在API级别21上,可以使用tint属性。但我假设您不想针对21+设备进行目标设置。至少不是在未来几年内。


3
对于支持库v7,ImageView上的色调效果正常运作,已在2.3和4.4上进行了测试。 - sherpya
请使用 app:tint = "" 代替 android:tint = ""。 - vicky

-1
如果您想使用色调并支持旧版本,可以将com.android.support:appcompat-v7:23.2.1添加到build.gradle中(不要忘记更新Android SDK)。
感谢@sherpya的提示!

4
这不正确。应该不需要明确使用AppCompatImageView,因为普通的ImageView在“幕后”自动使用它。使用它将不会有任何区别。ImageView也是唯一一个从api 1就内置了“tint”的视图(这意味着无论你正在针对哪个Android版本,都可以在其上设置android:tint)。 - Joakim
感谢您修复我的问题。我之前没有使用AppCompatImageView尝试,以为它无法工作。现在已经编辑了答案。 - bentzy
没错,我自己也曾经掉入同样的陷阱。但据我所知,tint并没有暴露给使用支持库的开发人员,只能从主题设置中进行。如果我错了,请告诉我。 - Joakim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接