android - ViewCompat setBackgroundTintList在API 21中不起作用

时间:2017-05-22 16:19:10

标签: java android android-5.0-lollipop

我有一个 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();
  }

1 个答案:

答案 0 :(得分:0)

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

您应该使用setSupportBackgroundTintList作为{strong> AppCompat * 视图的成员(例如AppCompatEditText

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

如果要在 XML 中进行设置,只需使用支持库中的app:setBackgroundTintList,而不是android:setBackgroundTintList