44 votes

Obtenir la couleur d'arrière-plan d'un bouton dans Android

Comment puis-je obtenir la couleur de fond d'un bouton. Dans le XML, j'ai défini la couleur d'arrière-plan en utilisant ---- android:background = XXXXX maintenant dans la classe d'activité, comment puis-je récupérer cette valeur qu'elle a ?

87voto

Matthew Rudy Points 10538

Malheureusement, je ne sais pas comment récupérer la couleur réelle.

Il est facile d'obtenir ceci en tant que Drawable

 Button button = (Button) findViewById(R.id.my_button);
Drawable buttonBackground = button.getBackground();

Si vous savez que c'est une couleur, vous pouvez essayer

 ColorDrawable buttonColor = (ColorDrawable) button.getBackground();

Et si vous utilisez Android 3.0+, vous pouvez obtenir l'identifiant de ressource de la couleur.

 int colorId = buttonColor.getColor();

Et comparez cela à vos couleurs attribuées, c'est-à-dire.

 if (colorID == R.color.green) {
  log("color is green");
}

19voto

jpmcosta Points 143
private Bitmap mBitmap;
private Canvas mCanvas;
private Rect mBounds;

public void initIfNeeded() {
  if(mBitmap == null) {
    mBitmap = Bitmap.createBitmap(1,1, Bitmap.Config.ARGB_8888);
    mCanvas = new Canvas(mBitmap);
    mBounds = new Rect();
  }
}

public int getBackgroundColor(View view) {
  // The actual color, not the id.
  int color = Color.BLACK;

  if(view.getBackground() instanceof ColorDrawable) {
    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
      initIfNeeded();

      // If the ColorDrawable makes use of its bounds in the draw method,
      // we may not be able to get the color we want. This is not the usual
      // case before Ice Cream Sandwich (4.0.1 r1).
      // Yet, we change the bounds temporarily, just to be sure that we are
      // successful.
      ColorDrawable colorDrawable = (ColorDrawable)view.getBackground();

      mBounds.set(colorDrawable.getBounds()); // Save the original bounds.
      colorDrawable.setBounds(0, 0, 1, 1); // Change the bounds.

      colorDrawable.draw(mCanvas);
      color = mBitmap.getPixel(0, 0);

      colorDrawable.setBounds(mBounds); // Restore the original bounds.
    }
    else {
      color = ((ColorDrawable)view.getBackground()).getColor();
    }
  }

  return color;
}

17voto

blessenm Points 14700

Vous pouvez également essayer quelque chose comme définir la valeur de couleur comme balise comme

 android:tag="#ff0000"

Et y accéder depuis le code

 String colorCode = (String)btn.getTag();

10voto

Java Geek Points 307

La façon la plus simple d'obtenir la couleur pour moi est :

 int color = ((ColorDrawable)button.getBackground()).getColor();

Testé et fonctionnel sur Lollipop 5.1.1

2voto

brianestey Points 3206

Pour obtenir l'arrière-plan Drawable , vous utilisez

 public Drawable getBackground();

tel que défini dans la classe de View

N'oubliez pas que les Button peuvent avoir un fond qui est une image, une couleur, un dégradé. Si vous utilisez android:background="#ffffff", la classe de l'arrière-plan sera

android.graphics.drawable.ColorDrawable

De là, vous pouvez simplement appeler

 public int getColor()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X