以Kotlin编程方式更改MaterialButton图标的图标色调

12
我需要更改MaterialButton的图标色调,该图标是一个xml矢量资产,我可以在xml布局中轻松更改色调,但我需要在单击时以编程方式更改颜色,我找不到任何相关的内容来解决这个问题,这是我的按钮:

我需要更改MaterialButton的图标色调,该图标是一个xml矢量资产,我可以在xml布局中轻松更改色调,但我需要在单击时以编程方式更改颜色,我找不到任何相关的内容来解决这个问题,这是我的按钮:

<com.google.android.material.button.MaterialButton
                android:id="@+id/btnShowDepartmentList"
                style="@style/com.madison.Button.IconButton"
                app:iconSize="32dp"
                android:padding="0dp"
                android:paddingLeft="5dp"
                android:paddingStart="5dp"
                app:icon="@drawable/ic_list_thumbnails"
                android:layout_width="42dp"
                android:layout_height="42dp"
                app:iconTint="@color/orangeLighter"
                tools:ignore="RtlSymmetry"/> ```
3个回答

10
您需要使用MaterialButton的setIconTint(ColorStateList)setIconTintResource(Int)方法。例如:
val button = findViewById<MaterialButton>(R.id.btnShowDepartmentList)
button.setOnClickListener {
    button.setIconTintResource(R.color.orangeLighter)
}

你不能直接在 setIconTint 中设置颜色,它需要一个colorStateList。相反,使用 setIconTintResource。 - Extremis II
1
谢谢@sudesh!我不知道是否有旧版本的库中有那个方法,或者我一开始就弄错了,但我会更新我的答案。 - Ben P.

3
你需要在程序中将ColorStateList传递给iconTint。
btnShowDepartmentList.iconTint = ContextCompat.getColorStateList(activity, R.color.orangeLighter)

2
这对我有效:

btnShowDepartmentThumbnails.setOnClickListener {
        btnShowDepartmentThumbnails.setIconTintResource(R.color.orangeLighter)            
    }

我的错误是尝试使用以下方式设置图标色调:

 btnShowDepartmentThumbnails.setOnClickListener {
            it.setIconTintResource(R.color.orangeLighter)            
        }

1
无法正常工作的原因是lambda中的it类型为View!(请记住,接口的onClick()方法传递了一个参数View v),而您尝试调用的方法是MaterialButton的方法。如果您想使用it,可以执行强制转换:(it as MaterialButton).foo() - Ben P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接