Reputation: 577
I tried this code:
LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
someLayout.setBackgroundTintList(context.getResources().getColorStateList(Color.parseColor("#ff8800")));
But I'm getting an error: android.content.res.Resources$NotFoundException
I'm getting the color hex from external source so I can't embed it in colors.xml.
Also I want to change the tint, not the background so setBackground is not an option.
Upvotes: 11
Views: 19718
Reputation: 3252
In case you are using BindingAdapter
, Kotlin
and targeting more recent Android versions:
@JvmStatic
@BindingAdapter("app:backgroundTint")
fun LinearLayout.setBackgroundTint(@ColorInt color: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
background.colorFilter = BlendModeColorFilter(color, BlendMode.SRC_ATOP)
} else {
background.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
}
}
Upvotes: 0
Reputation: 21
For Kotlin , I modified @Krestek answer :
someLayout.background.setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP)
Upvotes: 2
Reputation: 2150
I was able to manage using the following line. change it to your circumstances.
myView.getBackground().setTint(currentView.getResources().getColor(R.color.colorAccent));
Upvotes: 11
Reputation: 577
I figured I can't use getColorStateList() so I searched for another way to do it. At the end I was able to set color tint using the following code:
LinearLayout someLayout=(LinearLayout)view.findViewById(R.id.someLayout);
someLayout.getBackground().setColorFilter(Color.parseColor("#ff8800"), PorterDuff.Mode.SRC_ATOP);
This worked as if I changed the backgroundTint property in the xml file, so it's perfect for my problem.
Upvotes: 23