我想用kotlin在android中单击Button后更改背景

Nou*_*hat 3 android background button kotlin

我想在点击按钮后更改背景

   var bm : Button = messeg
    bm . setOnClickListener {
        bm . background = R.color.green
    }
Run Code Online (Sandbox Code Playgroud)

错误日志:

错误:(35,31)类型不匹配:推断类型是Int但可绘制!预计错误:任务':app:compileDebugKotlin'的执行失败.

编译错误.有关详细信息,请参阅日志

Bob*_*Bob 10

background需要a Drawable,但是你传递的是颜色资源.

  1. 您可以使用setBackgroundColor设置颜色资源:

bm.setBackgroundColor(R.color.green)

  1. setBackgroundResource 可用于设置可绘制资源:

bm.setBackgroundResource(R.drawable.green_resource)

  1. background property可用于设置drawable:

bm.background = ContextCompat.getDrawable(context, R.drawable.green_resource)


小智 5

对于setBackgroundColor(),当前接受的答案是错误的。在给定的示例中,您将颜色设置为资源ID,但是必须直接传递颜色。

这不会失败,因为两个值都是int,但是您会得到奇怪的颜色。

取而代之的是,您应该首先从资源中检索颜色,然后将其设置为背景。范例:

val colorValue = ContextCompat.getColor(context, R.color.green)
bm.setBackgroundColor(colorValue)
Run Code Online (Sandbox Code Playgroud)