【问题标题】:android - ViewCompat setBackgroundTintList not working in API 21android - ViewCompat setBackgroundTintList 在 API 21 中不起作用
【发布时间】:2017-05-22 16:19:09
【问题描述】:

我有一个 AppCompatEditText 属性 backgroundTint 设置为特定颜色。 我创建了一种以编程方式更改背景色调的方法,并且它适用于自 API 17 (4.2 Jelly Bean) 到 API 25 (7.1.1 Nougat) 的所有 Android 版本,API 21 (5.0 Lollipop) 除外.

我不知道我做错了什么。这是我的代码:

    public void changeViewBackgroundColor(Context context, View view, int color) {
      int theColor = ContextCompat.getColor(context, color);

      if (view instanceof TintableBackgroundView) {
        ColorStateList colorStateList = ColorStateList.valueOf(theColor);
        ViewCompat.setBackgroundTintList(view, colorStateList);
      } else {
        view.setBackgroundColor(theColor);
      }

      view.invalidate();
  }

【问题讨论】:

标签: java android android-5.0-lollipop


【解决方案1】:

不幸的是,在 API 21 中引入了一个更改,当使用 ViewCompat 或视图本身时破坏了 setBackgroundTintList(后来在 API 22 中修复)。

您应该使用 setSupportBackgroundTintList 代替它,您可以在 AppCompat* 视图的成员中找到它(例如 AppCompatEditText

AppCompatEditText editText = findViewById(R.id.your_view);
editText.setSupportBackgroundTintList(colorStateList);

如果你想在 XML 中设置它,只需使用支持库中的app:setBackgroundTintList,而不是android:setBackgroundTintList

【讨论】:

  • 在找到这个之前我一直很头疼。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多