Get background color of a Layout
AndroidBackground ColorAndroid Problem Overview
I want to find the background color of a Layout from my code. Is there any way to find it? something like linearLayout.getBackgroundColor()
?
Android Solutions
Solution 1 - Android
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();
Solution 2 - Android
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.
Solution 3 - Android
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;
}
Solution 4 - Android
Short and Simple way:
int color = ((ColorDrawable)view.getBackground()).getColor();
Solution 5 - Android
For kotlin fans
fun View.getBackgroundColor() = (background as? ColorDrawable?)?.color ?: Color.TRANSPARENT
Solution 6 - Android
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
}