2010-10-29 7 views
22

Suppression de la couleur de fond dans Androidla suppression backgroundcolor d'une vue dans Android

J'ai mis backgroundColor dans le code comme celui-ci,

View.setBackgroundColor(0xFFFF0000); 

Comment enlever cette couleur d'arrière-plan sur un événement?

+3

Vous pouvez le définir en transparent: View.setBackgroundColor (0x00000000); Ou android.R.color.transparent – Juhani

+3

juste découvert que, une autre façon de le définir à transparent serait, View.setBackgroundColor (Color.TRANSPARENT); – sat

+0

Si vous voulez juste utiliser l'arrière-plan du parent, vous pouvez supprimer l'arrière-plan de l'enfant entier avec: view.setBackgroundResource (0); –

Répondre

36

Vous devriez essayer de définir la couleur d'arrière-plan transparent:

view.setBackgroundColor(0x00000000);

+0

Ok, je pensais qu'il y aurait quelque chose pour enlever la propriété backgroundcolor. – sat

+1

Comme c'est un int je ne pense pas que vous pouvez trier "null", cette réponse devrait fonctionner aussi bien avec 0x00AAF890 (ou tout 0x00 ------) puisque les deux premiers 0 définissent l'opacité à 0% ce qui veut dire qu'il n'y a pas de couleur de fond. –

5

View.setBackgroundColor(0); fonctionne également. Il n'est pas nécessaire de mettre tous ces zéros.

19

Vous pouvez utiliser

View.setBackgroundColor(Color.TRANSPARENT);

ou

View.setBackgroundColor(0);

S'il vous plaît rappelez-vous que presque tout visible sur l'écran étend Voir, comme un bouton, TextView, ImageView, tout type de mise en page, etc ...

+2

Color.TRANSPARENT semble beaucoup plus propre que 0x0000000. Vous avez mon upvote! –

1

Tous des réponses à propos de la mise en couleur transparente fonctionnera techniquement. Mais il y a deux problèmes avec ces approches:

  1. Vous finirez avec overdraw.
  2. Il y a une meilleure façon:

Si vous regardez comment fonctionne View.setBackgroundColor(int color) vous verrez une solution assez facile:

/** 
* Sets the background color for this view. 
* @param color the color of the background 
*/ 
@RemotableViewMethod 
public void setBackgroundColor(@ColorInt int color) { 
    if (mBackground instanceof ColorDrawable) { 
     ((ColorDrawable) mBackground.mutate()).setColor(color); 
     computeOpaqueFlags(); 
     mBackgroundResource = 0; 
    } else { 
     setBackground(new ColorDrawable(color)); 
    } 
} 

La couleur int est simplement converti en un ColorDrawable puis passé à setBackground(Drawable drawable). Donc, la solution pour supprimer la couleur d'arrière-plan est d'annuler l'arrière-plan avec:

myView.setBackground(null); 
+0

Ceci est la réponse appropriée. Rendre l'arrière-plan transparent nécessite un temps de traitement, tandis que _removing the background_ ne l'est pas. – Sam

+0

setBackground est de API 16, comment puis-je faire pour les API inférieures? –

Questions connexes