【问题标题】:How to get background color in MaterialButton in kotlin android如何在kotlin android的MaterialButton中获取背景颜色
【发布时间】: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 的背景颜色?

【问题讨论】:

    标签: android kotlin android-button material-components 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。我刚刚更新了答案。
    • 是的!有用!非常感谢,你真是个天才!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2011-12-26
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多