如何在 kotlin 的 MaterialButton 中获取背景颜色 android

How to get background color in MaterialButton in kotlin android

我有一个布局:

<com.google.android.material.button.MaterialButtonToggleGroup
    ...
    app:checkedButton="@+id/favorite_color1"
    app:singleSelection="true">

    <com.google.android.material.button.MaterialButton
        android:id="@+id/favorite_color1"
        ... />

    <com.google.android.material.button.MaterialButton
        android:id="@+id/favorite_color2"
        ... />

</com.google.android.material.button.MaterialButtonToggleGroup>

在我的片段中,我可以这样设置背景颜色:

favorite_color1.setBackgroundColor(color)

A MaterialButton 有一个方法 background 那个 returns 一个 RippleDrawable 我看到了 this question 但它不起作用而且它已经过时了大概日期。

如何以编程方式获取 MaterialButton 的背景颜色?

MaterialButton 中,背景颜色由 app:backgroundTint 属性(不是 background 属性)定义。

背景色set/get相关方法有:

  • setBackgroundColor
  • setBackgroundTintList
  • getBackgroundTintList

在你的情况下你可以使用:

button.getBackgroundTintList()

这是一个ColorStateList
您可以使用以下方法获取每个状态的颜色:colorStateList.getColorForState.

例如:

textView.setTextColor(
        colorStateList!!.getColorForState(
      intArrayOf(android.R.attr.state_enabled), 0))

或 java:

textView.setTextColor(colorStateList.getColorForState(
     new int[] { android.R.attr.state_enabled},0));

请注意。
如果您使用的是 setBackgroundColor 方法,例如 favorite_color1.setBackgroundColor(color),上面的代码将不起作用。

你必须使用方法setBackgroundTintList

favorite_color1.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.color)))