如何在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中获取背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Kotlin 中创建 BottomSheet
我们如何在 firebase(android、kotlin)中记录错误?
如何使用 Kotlin 在 android 中的 BottomNavigationView 上设置 OnNavigationItemListener?