如何在Android API上使用setImageTintList()<;21

如何在Android API上使用setImageTintList()<;21,android,android-support-library,Android,Android Support Library,它说“调用需要API级别21” 如何在API 21以下的Android设备上运行 我可以使用ImageView#setColorFilter()使其工作,但我更喜欢使用ColorStateList来设置色调。您应该使用它来实现这一点。在API 21+上,它将使用ImageView#setImageTintList(),正如您所期望的那样。。。在较旧的平台版本上,它将委托给提供后端口实现的AppCompatImageView imgView.setImageTintList(getResource

它说“调用需要API级别21”

如何在API 21以下的Android设备上运行

我可以使用
ImageView#setColorFilter()
使其工作,但我更喜欢使用
ColorStateList
来设置色调。

您应该使用它来实现这一点。在API 21+上,它将使用
ImageView#setImageTintList()
,正如您所期望的那样。。。在较旧的平台版本上,它将委托给提供后端口实现的AppCompatImageView

imgView.setImageTintList(getResources()
      .getColorStateList(R.color.my_clr_selector));

现在,支持库25.4.0中提供了此功能。看


ImageViewCompat.setImageTintList(imageView,colorStateList)

使用
DrawableCompat#setTintList()
@pskink但是getResources()。getColorStateList是不受欢迎的,你不知道该用什么来代替吗?请注意,
AppCompatResources
只是在支持库的24.x中添加的(我想)。您可以潜在地使用
ResourcesCompat
,这是早期引入的几个版本。我会尽可能使用
AppCompatResources
,因为它能够解析
ColorStateList
XML中声明的主题属性,即使在Marshamallow之前的设备上也是如此(请阅读中的更多信息).很好,但是很蹩脚,因为API 21有一行代码来实现相同的功能,但是API<21仍然很困难;在
DrawableCompat
ViewCompat
中不支持。它适合我。我的支持库版本是24.3.1。setTintList()方法的第一个参数接受一个Drawable对象,文档声明“调用该方法的Drawable对象”。因此,您不需要调用imageView.setImageDrawable(drawable);已应用于imageView。下面的代码应该做完全相同的事情;只有较少的代码行:ColorStateList csl=AppCompatResources.getColorStateList(context,R.color.my\u clr\u选择器);setTintList(imageView.getDrawable(),csl)
ImageViewCompat
在最新版本的SDK中不再可用。我甚至不确定它是否在那里,尽管在文档中提到过。@sud007必须这样使用:
ColorStateList csl=AppCompatResources.getColorStateList(act,R.color.colorPrimary);ImageViewCompat.setImageTintList(((ImageView)view.findViewById(R.id.ic_edt)),csl)
@ArMo372是的,我知道我将如何使用它,但我当时在代码中找不到任何这样的类。如果可能的话,我们将在下次看到并发表评论。谢谢你的回复!
ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_color_state_list);
ImageViewCompat.setImageTintList(imageView, csl);
ImageViewCompat.setImageTintList(ivImage, ColorStateList.valueOf(ContextCompat.getColor(context, R.color.primaryColor)));