Как получить цвет фона в MaterialButton в 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)

А MaterialButton имеет метод background который возвращает RippleDrawableи я видел этот вопрос, но он не работает и, вероятно, устарел.

Как получить цвет фона дляMaterialButton программно?

1 ответ

Решение

В MaterialButton цвет фона определяется app:backgroundTint атрибут (не background атрибут).

Связанный метод установки / получения цвета фона:

  • 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)))
Другие вопросы по тегам