Obtenir la couleur de fond 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 de fond en utilisant - - - - android: background = XXXXX maintenant, dans la classe d'activité comment puis-je récupérer cette valeur qu'il a ?

36
demandé sur LostPuppy 2011-11-11 06:40:12

6 réponses

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

Il est facile d'obtenir ce que un Drawable

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

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

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

Et si vous êtes sur Android 3.0+ vous pouvez obtenir l'id de la ressource de la couleur.

int colorId = buttonColor.getColor();

et comparez ceci à vos couleurs assignées, c.-à-d.

if (colorID == R.color.green) {
  log("color is green");
}
78
répondu Matthew Rudy 2011-11-11 03:12:21
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;
}
19
répondu jpmcosta 2012-12-06 16:56:06

vous pouvez aussi essayer quelque chose comme définir la valeur de la couleur comme la balise comme

android:tag="#ff0000"

Et y accéder à partir du code

String colorCode = (String)btn.getTag();
14
répondu blessenm 2011-11-11 03:15:44

La plus simple d'obtenir la couleur pour moi, c'est:

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

testé et travaillant sur Lollipop 5.1.1

5
répondu Java Geek 2015-12-24 09:21:13

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

public Drawable getBackground();

comme défini dans la base View classe.

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

android.graphique.drawable.ColorDrawable

A partir de là vous pouvez simplement appeler

public int getColor()
2
répondu brianestey 2011-11-11 03:33:53

essaye ceci:

list_view.getChildAt(position).setBackgroundColor(Color.YELLOW);        
ColorDrawable corItem = (ColorDrawable) list_view.getChildAt(position).getBackground();
if(corItem.getColor() == Color.YELLOW){
   Toast.makeText(NovoProcessoActivity.this,"Right Color!", Toast.LENGTH_SHORT).show();
   }else{
   Toast.makeText(NovoProcessoActivity.this,"Wrong Color!", Toast.LENGTH_SHORT).show();
}

ou

int color =( (ColorDrawable)  list_view.getChildAt(position).getBackground()).getColor();
0
répondu Marcos Militão 2017-02-01 16:51:23