wake-up-neo.com

Holen Sie sich die Hintergrundfarbe eines Layouts

Ich möchte die Hintergrundfarbe eines Layouts aus meinem Code ermitteln. Gibt es eine Möglichkeit, es zu finden? so etwas wie linearLayout.getBackgroundColor()?

52
Srujan Simha

Dies ist in API 11+ nur möglich, wenn der Hintergrund einfarbig ist.

int color = Color.TRANSPARENT;
Drawable background = view.getBackground();
if (background instanceof ColorDrawable)
    color = ((ColorDrawable) background).getColor();
111
Rich

So erhalten Sie die Hintergrundfarbe eines Layouts:

LinearLayout lay = (LinearLayout) findViewById(R.id.lay1);
ColorDrawable viewColor = (ColorDrawable) lay.getBackground();
int colorId = viewColor.getColor();

Wenn es sich um RelativeLayout handelt, suchen Sie einfach die ID und verwenden Sie das Objekt anstelle von LinearLayout.

12
arpit

ColorDrawable.getColor () funktioniert nur mit API-Level über 11, sodass Sie diesen Code verwenden können, um ihn ab API-Level 1 zu unterstützen. Verwenden Sie Reflection unter 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;
    }
10
Akhil Dad

Kurz und einfach:

int color = ((ColorDrawable)view.getBackground()).getColor();
6
Aashish