Get background color of a Layout

AndroidBackground Color

Android 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
 }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSrujan SimhaView Question on Stackoverflow
Solution 1 - AndroidRichView Answer on Stackoverflow
Solution 2 - AndroidarpitView Answer on Stackoverflow
Solution 3 - AndroidAkhil DadView Answer on Stackoverflow
Solution 4 - AndroidAashish KumarView Answer on Stackoverflow
Solution 5 - AndroidDominik SuszczewiczView Answer on Stackoverflow
Solution 6 - AndroidRaphael CView Answer on Stackoverflow