2010-10-29 10 views
22

Rimozione colore di sfondo in Androidrimozione di colore di sfondo di una vista in Android

ho impostato backgroundColor in codice come questo,

View.setBackgroundColor(0xFFFF0000); 

come rimuovere questo colore di sfondo su qualche evento?

+3

Si potrebbe impostare a trasparente: View.setBackgroundColor (0x00000000); O android.R.color.transparent – Juhani

+3

ha appena scoperto che, un altro modo per impostarlo su trasparente sarebbe, View.setBackgroundColor (Color.TRANSPARENT); – sat

+0

Se si desidera utilizzare solo lo sfondo del genitore, è possibile rimuovere lo sfondo dell'intero bambino con: view.setBackgroundResource (0); –

risposta

36

Si dovrebbe provare ad impostare il colore di sfondo a trasparente:

view.setBackgroundColor(0x00000000);

+0

Ok, ho pensato che ci sarà qualcosa da rimuovere proprietà backgroundcolor. – sat

+1

Poiché è un int, non penso che si possa "azzerare", questa risposta dovrebbe funzionare bene anche con 0x00AAF890 (o qualsiasi 0x00 ------) dato che i primi due 0 impostano l'opacità a 0% il che significa che non c'è colore di sfondo. –

5

View.setBackgroundColor(0); funziona anche. Non è necessario mettere tutti quegli zeri.

19

È possibile utilizzare

View.setBackgroundColor(Color.TRANSPARENT);

o

View.setBackgroundColor(0);

Si ricorda che quasi tutto visibile sullo schermo si estende View, come un pulsante, TextView, ImageView, qualsiasi tipo di Layout, ecc ...

+2

Color.TRANSPARENT sembra molto più pulito di 0x0000000. Hai il mio upvote! –

1

Tutti delle risposte sull'impostazione del colore a trasparente funzionerà tecnicamente. Ma ci sono due problemi con questi approcci:

  1. Finirai con overdraw.
  2. C'è un modo migliore:

Se si guarda a come funziona View.setBackgroundColor(int color) vedrete una soluzione piuttosto semplice:

/** 
* 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)); 
    } 
} 

Il colore int è solo convertito in un ColorDrawable e poi passato a setBackground(Drawable drawable). Quindi la soluzione per rimuovere il colore di sfondo è ad appena nulla lo sfondo con:

myView.setBackground(null); 
+0

Questa è la risposta appropriata. Rendere trasparente lo sfondo richiede tempo di elaborazione, mentre _removing lo background_ no. – Sam

+0

setBackground proviene da API 16, come posso fare per le API inferiori? –

Problemi correlati