web-dev-qa-db-fra.com

Obtenir la couleur d'arrière-plan d'une mise en page

Je veux trouver la couleur d'arrière-plan d'une mise en page à partir de mon code. Existe-t-il un moyen de le trouver? quelque chose comme linearLayout.getBackgroundColor()?

52
Srujan Simha

Cela ne peut être accompli dans API 11+ que si votre arrière-plan est de couleur unie.

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

Pour obtenir la couleur d'arrière-plan d'une mise en page:

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

S'il s'agit de RelativeLayout, il suffit de trouver son identifiant et d'utiliser son objet au lieu de LinearLayout.

12
arpit

ColorDrawable.getColor () ne fonctionnera qu'avec le niveau d'API supérieur à 11, vous pouvez donc utiliser ce code pour le prendre en charge à partir du niveau d'API 1. Utilisez la réflexion en dessous du niveau d'API 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

Manière courte et simple:

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