I want to find the background color of a Layout from my code. Is there any way to find it? something like linearLayout.getBackgroundColor()
?
Get background color of a Layout
Asked Answered
This can only be accomplished in API 11+ if your background is a solid color.
int color = Color.TRANSPARENT;
Drawable background = view.getBackground();
if (background instanceof ColorDrawable)
color = ((ColorDrawable) background).getColor();
I was just going to edit my answer and say that specifically that might work! However, I am not sure why there's an API 11+ restriction?
ColorDrawable
seems to be available since API 1, and also view.getBackground(). –
Gas Nevermind. I see that
.getColor
for ColorDrawable was added in API 11. –
Gas You could convert the
Drawable
to a Bitmap
and get the first pixel. int color = bitmap.getPixel(0, 0);
–
Regin I used this
((ColorDrawable) row.getBackground()).getColor()
as (row.background as ColorDrawable).color
but i faced with this error android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.ColorDrawable
–
Enidenigma To get background color of a Layout:
LinearLayout lay = (LinearLayout) findViewById(R.id.lay1);
ColorDrawable viewColor = (ColorDrawable) lay.getBackground();
int colorId = viewColor.getColor();
If It is RelativeLayout then just find its id and use there object instead of LinearLayout.
Is there any reason against using ViewGroup (or even View) instead all it's possible sub classes to get the background? –
Preside
ColorDrawable.getColor() will only work with API level above 11, so you can use this code to support it from API level 1. Use reflection below API level 11.
public static int getBackgroundColor(View view) {
Drawable drawable = view.getBackground();
if (drawable instanceof ColorDrawable) {
ColorDrawable colorDrawable = (ColorDrawable) drawable;
if (Build.VERSION.SDK_INT >= 11) {
return colorDrawable.getColor();
}
try {
Field field = colorDrawable.getClass().getDeclaredField("mState");
field.setAccessible(true);
Object object = field.get(colorDrawable);
field = object.getClass().getDeclaredField("mUseColor");
field.setAccessible(true);
return field.getInt(object);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return 0;
}
Short and Simple way:
int color = ((ColorDrawable)view.getBackground()).getColor();
For kotlin fans
fun View.getBackgroundColor() = (background as? ColorDrawable?)?.color ?: Color.TRANSPARENT
I think there are cases where background might not a ColorDrawable
so we need to check it before the cast:
if (view.background is ColorDrawable) {
val bgColor = (view.background as ColorDrawable).color
}
© 2022 - 2024 — McMap. All rights reserved.
Drawable
. There is no API to get background color, specifically. Read more in the docs for View – GasDrawable
? – Deductive