Obtener el color de fondo de un botón en Android

¿Cómo obtengo el color de fondo de un botón? En el xml establezco el color de fondo usando —- android: background = XXXXX ahora en la clase de actividad ¿cómo puedo recuperar este valor que tiene?

Lamentablemente, no sé cómo recuperar el color real.

Es fácil obtener esto como un Drawable

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

Si sabes que este es un color, puedes intentar

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

Y si tienes Android 3.0 o superior, puedes obtener la identificación del recurso del color.

 int colorId = buttonColor.getColor(); 

Y compare esto con sus colores asignados, es decir.

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

También puedes probar algo como establecer el valor de color como la etiqueta como

 android:tag="#ff0000" 

Y acceda desde el código

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

La forma más sencilla de obtener el color para mí es:

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

Probado y trabajando en Lollipop 5.1.1

Para obtener el fondo Drawable , usa

 public Drawable getBackground(); 

como se define en la clase de View base.

No olvide que el Button puede tener un fondo que sea una imagen, un color o un degradado. Si usas android: background = “# ffffff”, la clase del fondo será

android.graphics.drawable.ColorDrawable

Desde allí, simplemente puede llamar

 public int getColor() 

Prueba esto:

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

o

 int color =( (ColorDrawable) list_view.getChildAt(position).getBackground()).getColor();