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 ?
Réponses
Trop de publicités?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");
}
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;
}
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()