android以编程方式设置按钮背景

pea*_*mak 37 android button

我想知道如何以编程方式设置按钮颜色?我编写了以下代码但失败了:

Button11.setBackgroundColor(R.color.red);
Run Code Online (Sandbox Code Playgroud)

谢谢!!

Eri*_*ric 77

R.color.red是一个ID(也是一个int),但不是一种颜色.

请改用以下其中一项:

// If you're in an activity:
Button11.setBackgroundColor(getResources().getColor(R.color.red));
// OR, if you're not: 
Button11.setBackgroundColor(Button11.getContext().getResources().getColor(R.color.red));
Run Code Online (Sandbox Code Playgroud)

或者,或者:

Button11.setBackgroundColor(Color.RED); // From android.graphics.Color
Run Code Online (Sandbox Code Playgroud)

或者,更多专业技能:

Button11.setBackgroundColor(0xFFFF0000); // 0xAARRGGBB
Run Code Online (Sandbox Code Playgroud)

  • 但它会删除所有样式,如边框或圆角.因此它实际上为按钮区域设置颜色,而不是像OP请求的按钮颜色. (4认同)
  • 考虑到现在不推荐使用`getColor()`.使用`ContextCompat` http://stackoverflow.com/a/32149275/1358777 (3认同)

soj*_*jin 38

旧线程,但学到了新的东西,希望这可能会帮助某人.

如果您想更改背景颜色但保留其他样式,则下面的内容可能有所帮助.

button.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用材质样式凸起按钮,这将是有效的.不是'Button.setBackgroundColor()`. (7认同)

小智 5

您可以以编程方式将所需的颜色设置为按钮,例如:

Button11.setBackgroundColor(Android.Graphics.Color.parseColor("#738b28"));
Run Code Online (Sandbox Code Playgroud)

您也可以为按钮指定文本颜色,例如:

Button11.setTextColor(Android.Graphics.Color.parseColor("#FFFFFF"));
Run Code Online (Sandbox Code Playgroud)


fin*_*las 5

您在2020 年及以后寻找的答案:

  • setColorFilter(color, mode)自 API 29 起弃用如此处所述
  • button.setBackgroundColor(color) 按钮样式混乱

现在设置按钮颜色的正确方法是使用BlendModeColorFilter()参见文档)。

用法:

btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.MULTIPLY)
Run Code Online (Sandbox Code Playgroud)

如果您也使用旧 API:

fun setButtonColor(btn: Button, color: Int) {
    if (Build.VERSION.SDK_INT >= 29)
        btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.MULTIPLY)
    else
        btn.background.setColorFilter(color, PorterDuff.Mode.MULTIPLY)
}
Run Code Online (Sandbox Code Playgroud)

投票以帮助其他人找到这个答案-我花了很长时间才弄清楚这一点^^