我想知道如何通过编程设置按钮的颜色? 我编写了以下代码,但失败了:
Button11.setBackgroundColor(R.color.red);
谢谢!!
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
getColor()
现在已经被弃用,建议使用ContextCompat
。参考链接:https://dev59.com/HlwZ5IYBdhLWcg3wVO9U#32149275 - Alwin Kesler虽然是旧帖,但我学到了新东西,希望这能帮助到某些人。
如果您想更改背景颜色但保留其他样式,那么以下内容可能会有所帮助。
button.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
setColorFilter
只会为现有的背景设置色调,而不会设置新的背景颜色。 - Anshu DwibhashiButton.setBackgroundColor()
。 - fahmyPorterDuff.Mode.MULTIPLY
而不是 PorterDuff.Mode.SRC
?前者不会只是与现有颜色混合吗? - Anigif在 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)
}
xml
中使用style=?android:attr/borderlessButtonStyle
来设置按钮样式,则无法正常工作。 - Hmerman6006Button11.setBackgroundColor(Android.Graphics.Color.parseColor("#738b28"));
Button11.setTextColor(Android.Graphics.Color.parseColor("#FFFFFF"));
btn.setBackgroundColor(Color.parseColor("#97a0ad"));
也可以工作。 - lechat我发现当我尝试执行以下操作时,Android Studio会给我一个警告,说getColor()
已被弃用:
Button11.setBackgroundColor(getResources().getColor(R.color.red))
我发现以下方法是一个简单、最新的解决方案:
Button11.setBackgroundColor(ContextCompat.getColor(context, R.color.red))
在编写代码时,应避免硬编码颜色参数,因为这被认为是不良的代码风格。
编辑:在使用setBackgroundColor()
自定义按钮后,我发现内部按钮填充扩展了。我找不到任何方法将其改回高度和宽度都设置为"wrap_content"。也许这是一个bug。
为了在设置背景颜色时不改变按钮的大小:
button.getBackground().setColorFilter(button.getContext().getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
根据@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);
<?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>
location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
location.setBackgroundResource(R.drawable.green);
}
});
yourbtnid.background.setColorFilter(ContextCompat.getColor(context, yourcolor), PorterDuff.Mode.SRC)
button.setBackgroundColor(getResources().getColor(R.color.red);
设置此视图的背景颜色。 参数:背景颜色color
R.color.red
是在gen目录下编译时生成的引用。
Button.setBackgroundResource()
而不是setBackgroundColor()
。 - FoamyGuy