wake-up-neo.com

Holen Sie sich die Hintergrundfarbe eines Buttons in android

Wie bekomme ich die Hintergrundfarbe einer Schaltfläche. In der XML-Datei stelle ich die Hintergrundfarbe mit ---- Android: background = XXXXX jetzt in der Aktivitätsklasse ein. Wie kann ich diesen Wert abrufen, den er hat?

38
LostPuppy

Leider weiß ich nicht, wie ich die tatsächliche Farbe ermitteln soll.

Es ist einfach, dies als Drawable zu bekommen

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

Wenn Sie wissen, dass dies eine Farbe ist, können Sie es versuchen

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

Und wenn Sie Android 3.0+) verwenden, können Sie die Ressourcen-ID der Farbe herausfinden.

int colorId = buttonColor.getColor();

Und vergleichen Sie dies mit Ihren zugewiesenen Farben, dh.

if (colorID == R.color.green) {
  log("color is green");
}
81
Matthew Rudy
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;
}
20
jpmcosta

Sie können auch versuchen, den Farbwert als Tag festzulegen

Android:tag="#ff0000"

Und greifen Sie über den Code darauf zu

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

Der einfachste Weg, um die Farbe für mich zu bekommen, ist:

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

Getestet und funktioniert mit Lollipop 5.1.1

5
Java Geek

Um den Hintergrund Drawable zu erhalten, verwenden Sie

public Drawable getBackground();

wie in der Basisklasse View definiert.

Vergiss nicht, dass Button einen Hintergrund haben kann, der ein Bild, eine Farbe, ein Farbverlauf ist. Wenn Sie Android verwenden: background = "# ffffff", wird die Klasse des Hintergrunds sein

Android.graphics.drawable.ColorDrawable

Von dort können Sie einfach anrufen

public int getColor()
2
brianestey

Versuche dies:

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();
}

oder

int color =( (ColorDrawable)  list_view.getChildAt(position).getBackground()).getColor();
0
Marcos Militão