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

Posted

技术标签:

【中文标题】如何在kotlin android的MaterialButton中获取背景颜色【英文标题】:How to get background color in MaterialButton in kotlin android 【发布时间】:2020-09-23 05:33:01 【问题描述】:

我有一个布局:

<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,我看到了 this question,但它不起作用,而且可能已经过时了。

如何以编程方式获取 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)))

【讨论】:

好的,但是button.getBackgroundTintList() 返回一个ColorStateList,然后呢?我可以得到defaultColor,但值是一个像 352321535 这样的数字。这是右键背景颜色吗?如何将此号码传递给Color 对象? @capo11 最终目标是什么?你想怎么用颜色? 最终的目标是获取按钮的背景颜色,然后用相同颜色更改另一个视图的背景颜色。 @capo11 如果其他视图与 ColorStateList 一起使用,请使用它。如果它适用于单一颜色,请使用方法colorStateList.getColorForState。我刚刚更新了答案。 是的!有用!非常感谢,你真是个天才!

以上是关于如何在kotlin android的MaterialButton中获取背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 kotlin 在 android 中初始化小部件

如何在 Android Kotlin 中创建 BottomSheet

我们如何在 firebase(android、kotlin)中记录错误?

Google 如何看待 Kotlin 与 Android

如何使用Kotlin进行Android开发

如何使用 Kotlin 在 android 中的 BottomNavigationView 上设置 OnNavigationItemListener?