I would like to know how to set the button color programatically? I have coded the following but fails:
Button11.setBackgroundColor(R.color.red);
Thanks!!
I would like to know how to set the button color programatically? I have coded the following but fails:
Button11.setBackgroundColor(R.color.red);
Thanks!!
R.color.red
is an ID (which is also an int
), but is not a color.
Use one of the following instead:
// 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));
Or, alternatively:
Button11.setBackgroundColor(Color.RED); // From android.graphics.Color
Or, for more pro skills:
Button11.setBackgroundColor(0xFFFF0000); // 0xAARRGGBB
getColor()
is deprecated now. Use ContextCompat
https://mcmap.net/q/50140/-getcolor-int-id-deprecated-on-android-6-0-marshmallow-api-23 –
Utimer Old thread, but learned something new, hope this might help someone.
If you want to change the background color but retain other styles, then below might help.
button.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
setColorFilter
only sets a tint to the existing background. It doesn't set a new background colour. –
Sunnysunproof Button.setBackgroundColor()
. –
Darees PorterDuff.Mode.MULTIPLY
instead of PorterDuff.Mode.SRC
? Won't the former just mix in with the existing color? –
Lindsley The answer you're looking for in 2020 and beyond:
setColorFilter(color, mode)
is deprecated since API 29 (as discussed here)button.setBackgroundColor(color)
messes with the button styleNow the proper way to set a buttons color is using BlendModeColorFilter()
(see documentation).
Usage:
btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.MULTIPLY)
If you work with older APIs too:
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)
}
Please vote to help others finding this answer - it took me quite a while figuring this out ^^
xml
with style=?android:attr/borderlessButtonStyle
. –
Condemnatory You can set your desired color to the button programmatically like:
Button11.setBackgroundColor(Android.Graphics.Color.parseColor("#738b28"));
Also you can give the text color for a button like:
Button11.setTextColor(Android.Graphics.Color.parseColor("#FFFFFF"));
btn.setBackgroundColor(Color.parseColor("#97a0ad"));
also works –
Luculent I have found that Android Studio gives me a warning that getColor()
is deprecated when trying to do this:
Button11.setBackgroundColor(getResources().getColor(R.color.red))
So I found doing the method below to be the simple, up-to-date solution:
Button11.setBackgroundColor(ContextCompat.getColor(context, R.color.red))
You want to avoid hard-coding in the color argument, as it is considered bad code style.
Edit: After using setBackgroundColor()
with my own button, I saw that the internal button padding expanded. I couldn't find any way of changing it back to having both height and width set to "wrap_content". Maybe its a bug.
Source: https://mcmap.net/q/73283/-getresources-getcolor-is-deprecated-duplicate
For not changing the size of button on setting the background color:
button.getBackground().setColorFilter(button.getContext().getResources().getColor(R.color.colorAccent), PorterDuff.Mode.MULTIPLY);
this didn't change the size of the button and works with the old android versions too.
Using setBackgroundColor() affects the style. So, declare a new style of the same properties with respect to the previous button, with a a different color.
<?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>
Now, use OnClick method.
location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
location.setBackgroundResource(R.drawable.green);
}
});
this changes the button but looks similar to changing the background.
Further from @finnmglas, the Java answer as of 2021 is:
if (Build.VERSION.SDK_INT >= 29)
btn.getBackground().setColorFilter(new BlendModeColorFilter(color, BlendMode.MULTIPLY));
else
btn.getBackground().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
button.setBackgroundColor(getResources().getColor(R.color.red);
Sets the background color for this view. Parameters: color the color of the background
R.color.red
is a reference generated at the compilation in gen.
You can use the below code for the button color without getting effected the style if used any
yourbtnid.background.setColorFilter(ContextCompat.getColor(context, yourcolor), PorterDuff.Mode.SRC)
I've tried all of the above answers setColorFilter
, setBackgroundColor
,colorFilter
and so on, but nothing actually worked, all I was getting was a default color.
What worked for me was to use the backgroundTintList
like this:
myButton.backgroundTintList = ContextCompat.getColorStateList(this, R.color.red)
Or
myButton.backgroundTintList = ColorStateList.valueOf(Color.RED)
© 2022 - 2024 — McMap. All rights reserved.
Button.setBackgroundResource()
instead ofsetBackgroundColor()
– Geranium