【问题标题】:How to use setImageTintList() on Android API < 21如何在 Android API < 21 上使用 setImageTintList()
【发布时间】:2016-09-11 14:45:27
【问题描述】:
imgView.setImageTintList(getResources()
      .getColorStateList(R.color.my_clr_selector));

上面写着“调用需要 API 级别 21”。

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

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

【问题讨论】:

  • 使用DrawableCompat#setTintList()
  • @pskink 但不推荐使用 getResources().getColorStateList
  • 你不知道用什么代替?

标签: android android-support-library


【解决方案1】:

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

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

【讨论】:

  • 请注意 AppCompatResources 仅在支持库的 24.x 中添加(我认为)。您可能会使用之前几个版本中引入的ResourcesCompat
  • 我会尽可能使用AppCompatResources,因为它能够解析在ColorStateList XML 中声明的主题属性,即使在Marshamallow 之前的设备上也是如此(在my blog post 中了解更多信息)。
  • 很好但很蹩脚,因为 API 21 有一个单行代码来实现相同的功能,但 API DrawableCompat 或 ViewCompat 不支持。
  • 它对我有用。我的支持库版本是 24.3.1。
  • setTintList() 方法的第一个参数接受一个Drawable 对象,文档声明“调用该方法的Drawable”。因此你不需要调用 imageView.setImageDrawable(drawable);已经应用于 imageView。以下代码应该完全相同;只有较少的代码行: ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_clr_selector); DrawableCompat.setTintList(imageView.getDrawable(), csl);
【解决方案2】:

现在支持库 25.4.0 中提供了此功能。见Link

ImageViewCompat.setImageTintList(imageView, colorStateList)

【讨论】:

  • ImageViewCompat 在最新版本的 SDK 中不再可用。我什至不确定它是否在那里,尽管在文档中提到。
  • @sud007 必须像这样使用:ColorStateList csl = AppCompatResources.getColorStateList(act, R.color.colorPrimary); ImageViewCompat.setImageTintList( ((ImageView)view.findViewById(R.id.ic_edt)), csl);
  • @ArMo372 是的,我知道我将如何使用它,但后来我无法在代码中找到任何此类。如果可能,下次会看到并发表评论。感谢您的回复!
【解决方案3】:
ImageViewCompat.setImageTintList(ivImage, ColorStateList.valueOf(ContextCompat.getColor(context, R.color.primaryColor)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2015-04-16
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多