55

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

Button11.setBackgroundColor(R.color.red);

谢谢!!

4

10 回答 10

103

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));

或者,或者:

Button11.setBackgroundColor(Color.RED); // From android.graphics.Color

或者,对于更多专业技能:

Button11.setBackgroundColor(0xFFFF0000); // 0xAARRGGBB
于 2012-12-12T15:02:21.737 回答
48

老线程,但学到了一些新东西,希望这可能对某人有所帮助。

如果您想更改背景颜色但保留其他样式,那么下面可能会有所帮助。

button.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
于 2015-12-14T06:17:01.947 回答
6

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

  • setColorFilter(color, mode)自 API 29 起已弃用如这里讨论的
  • button.setBackgroundColor(color)与按钮样式混淆

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

用法:

btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.MULTIPLY)

如果您也使用较旧的 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)
}

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

于 2020-05-23T23:46:15.260 回答
5

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

Button11.setBackgroundColor(Android.Graphics.Color.parseColor("#738b28"));

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

Button11.setTextColor(Android.Graphics.Color.parseColor("#FFFFFF"));
于 2018-10-26T05:33:51.250 回答
1

在设置背景颜色时不改变按钮的大小:

button.getBackground().setColorFilter(button.getContext().getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);

这并没有改变按钮的大小,并且也适用于旧的 android 版本。

于 2018-09-12T18:22:45.920 回答
1

进一步来自@finnmglas,截至 2021 年的 Java 答案是:

    if (Build.VERSION.SDK_INT >= 29)
        btn.getBackground().setColorFilter(new BlendModeColorFilter(color, BlendMode.MULTIPLY));
    else
        btn.getBackground().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
于 2021-01-18T11:38:10.707 回答
1

我发现 Android StudiogetColor()在尝试执行此操作时给了我一个已弃用的警告:

Button11.setBackgroundColor(getResources().getColor(R.color.red))

所以我发现执行以下方法是简单、最新的解决方案:

Button11.setBackgroundColor(ContextCompat.getColor(context, R.color.red))

您希望避免在颜色参数中进行硬编码,因为它被认为是错误的代码样式。

编辑:使用setBackgroundColor()我自己的按钮后,我看到内部按钮填充扩展了。我找不到任何方法将其改回将高度和宽度都设置为“wrap_content”。也许它是一个错误。

来源: https ://stackoverflow.com/a/32202256/6030520

于 2018-06-10T04:06:55.363 回答
1

使用setBackgroundColor()会影响样式。因此,声明一个与前一个按钮具有相同属性的新样式,但颜色不同。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/green"/>
<corners android:radius="10dp"/>
</shape>

现在,使用 OnClick 方法。

location.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            location.setBackgroundResource(R.drawable.green);

        }
    });

这会更改按钮,但看起来类似于更改背景。

于 2020-05-31T12:06:23.463 回答
0
button.setBackgroundColor(getResources().getColor(R.color.red);

设置此视图的背景颜色。参数:color 背景颜色

R.color.red是在 gen 中编译时生成的参考。

于 2012-12-12T15:05:22.667 回答
0

您可以将以下代码用于按钮颜色,而不会影响样式(如果使用)

 yourbtnid.background.setColorFilter(ContextCompat.getColor(context, yourcolor), PorterDuff.Mode.SRC)
于 2021-03-08T04:46:58.237 回答