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

时间:2012-12-12 14:59:21

标签: android button

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

Button11.setBackgroundColor(R.color.red);

谢谢!

10 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分:37)

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

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

button.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.MULTIPLY);

答案 2 :(得分:2)

2020年及以后所要寻找的答案:

    自API 29起,
  • setColorFilter(color, mode)已过 as discussed here
  • button.setBackgroundColor(color)弄乱了按钮样式

现在设置按钮颜色的正确方法是使用BlendModeColorFilter()see documentation)。

用法:

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

投票以帮助他人找到该答案-我花了相当长的时间才弄清楚这个问题^^

答案 3 :(得分:1)

您可以通过编程方式将所需颜色设置为按钮,

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

您还可以为按钮设置文本颜色,例如:

Button11.setTextColor(Android.Graphics.Color.parseColor("#FFFFFF"));

答案 4 :(得分: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);

        }
    });

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

答案 5 :(得分: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);

答案 6 :(得分:0)

button.setBackgroundColor(getResources().getColor(R.color.red);

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

R.color.red是gen编译时生成的引用。

答案 7 :(得分:0)

我发现在尝试执行此操作时,Android Studio会向我发出警告:getColor()已被弃用:

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

所以我发现下面的方法是一个简单的,最新的解决方案:

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

你想避免在color参数中使用硬编码,因为它被认为是错误的代码风格。

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

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

答案 8 :(得分:0)

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

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

这不会更改按钮的大小,并且也适用于旧的android版本。

答案 9 :(得分:0)

你可以使用下面的代码来设置按钮颜色,如果使用了的话,不会影响样式

 yourbtnid.background.setColorFilter(ContextCompat.getColor(context, yourcolor), PorterDuff.Mode.SRC)