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

How to use setImageTintList() on Android API < 21

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

它说 'Call requires API level 21'。

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

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

您应该使用 ImageViewCompat#setImageTintList() 来实现。在 API 21+ 上,它将像您期望的那样使用 ImageView#setImageTintList()...而在较旧的平台版本上,它将委托给 AppCompatImageView,它提供了向后移植的实现。

ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_color_state_list);
ImageViewCompat.setImageTintList(imageView, csl);

支持库 25.4.0 中现已提供。参见 Link

ImageViewCompat.setImageTintList(imageView, colorStateList)

ImageViewCompat.setImageTintList(ivImage, ColorStateList.valueOf(ContextCompat.getColor(context, R.color.primaryColor)));