2010-01-31 14 views
138

Sto provando a impostare il colore di sfondo di una vista (in questo caso un pulsante).Come impostare il colore di sfondo di una vista

Io uso questo codice:

// set the background to green 
v.setBackgroundColor(0x0000FF00); 
v.invalidate(); 

Essa fa sì che il pulsante a scomparire dallo schermo. Cosa sto facendo male e qual è il modo corretto per cambiare il colore di sfondo su qualsiasi vista?

Grazie.

+1

Quello sembra corretto In realtà, non penso che tu debba chiamare invalidate(). Quando dici che il pulsante scompare, intendi letteralmente o vuoi dire che il pulsante ha un testo o un'immagine che scompare? – RickNotFred

risposta

247

Hai reso il tuo pulsante trasparente. Il primo byte è l'alfa.

Prova v.setBackgroundColor(0xFF00FF00);

+1

La risposta di EddieB sotto è molto meglio in quanto rimuove i bordi ecc. Come la sottolineatura di EditText –

+0

@aroth è migliore Color.Green? Se voglio il colore più complesso con argb? ... la tua risposta è deprecata – delive

+2

@delive - Vieni di nuovo? [Color.GREEN] (http://developer.android.com/reference/android/graphics/Color.html#GREEN) è _non deprecato e include il byte alfa. Il suo valore è '0xff00ff00', _exactly_ lo stesso di quanto suggerito nella risposta, tranne che ha anche il vantaggio di essere _human-readable_. La maggior parte degli sviluppatori preferirebbe una soluzione leggibile. – aroth

11

e qual è il modo corretto di cambiare il colore di sfondo in qualsiasi vista?

Su qualsiasiView? Quello che hai è corretto, anche se dovresti lasciare la chiamata invalidate().

Tuttavia, alcuni Views dispongono già di sfondi. Un Button, ad esempio, ha già uno sfondo: la faccia del pulsante stesso. Questo sfondo è un StateListDrawable, che puoi trovare in android-2.1/data/res/drawable/btn_default.xml nell'installazione di Android SDK. Questo, a sua volta, si riferisce a un mucchio di immagini bitmap a nove patch, disponibili in più densità. Dovresti clonare e modificare tutto ciò per raggiungere i tuoi obiettivi verdi.

In breve, sarà meglio trovare un altro schema dell'interfaccia utente piuttosto che tentare di modificare lo sfondo di uno Button.

+0

OK, grazie per la spiegazione sugli sfondi di Button. Nove bitmap (http://developer.android.com/reference/android/graphics/NinePatch.html) erano nuove per me. Voglio semplicemente cambiare il colore di qualsiasi cosa sullo schermo quando preme un pulsante. I pulsanti sono su una TextView. Cercando di cambiare il colore di quello, porta ai messaggi della console "DDM dispatch reg timeout di attesa ... ActivityManager: Impossibile inviare il blocco DDM 52454151: nessun gestore definito" e una finestra di dialogo sullo schermo "l'app si è arrestata in modo imprevisto". Indovina che ho bisogno di fare più letture sull'interfaccia utente. Qualsiasi suggerimento benvenuto. Grazie. –

3

Questo question parla della modifica del colore di sfondo di una vista. In una delle risposte, la persona spiega come modificare il colore di sfondo durante il runtime. Ovviamente stai andando a vedere come modificare altri oggetti sullo schermo, ma questo dovrebbe darti un buon inizio, almeno permettendoti di modificare il colore di sfondo della vista sul clic del pulsante.

15
// set the background to green 
v.setBackgroundColor(0x0000FF00); 
v.invalidate(); 

Il codice non imposta il pulsante su verde. Invece, rende il pulsante totalmente invisibile.

Spiegazione: il valore esadecimale del colore è errato. Con un valore Alfa pari a zero, il colore sarà invisibile.

Il valore esadecimale corretto è 0xFF00FF00 per il verde di opacità completo. Qualsiasi valore alfa compreso tra 00 e FF causerebbe trasparenza.

130

Quando si chiama setBackgoundColor esso sovrascrive/rimuove qualsiasi risorsa di fondo esistenti, comprese le eventuali bordi, angoli, imbottiture, ecc Che cosa si vuole fare è cambiare il colore di sfondo della risorsa esistente ...

View v; 
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN); 

Esperimento con PorterDuff.Mode. * Per effetti diversi.

+0

Ottimo .. mi ha salvato un sacco di tempo ..almeno una soluzione abbastanza bella per me –

+11

+1 per 'Color.parseColor()' – asakura89

+0

"sovrascrive/rimuove qualsiasi risorsa di sfondo esistente," non proprio. –

91

Diverse scelte per fare questo ...

Set sfondo di verde:

v.setBackgroundColor(0x00FF00); 

Set sfondo di verde con Alpha:

v.setBackgroundColor(0xFF00FF00); 

Set sfondo di verde con Color.GREEN costante:

v.setBackgroundColor(Color.GREEN); 

Set sfondo verde definire in Colors.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources>  
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources> 

e l'utilizzo di:

v.setBackgroundResource(R.color.myGreen); 

e:

v.setBackgroundResource(R.color.myGreenWithAlpha); 

o più a lungo senza fiato:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen)); 

e:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha)); 
+2

per me non funziona senza alpha – Hamidreza

+0

'getResources(). GetColor (...)' è stato deprecato http://stackoverflow.com/questions/31842983/getresources-getcolor-is-deprecated –

+5

C'è anche: 'v.setBackgroundResource (R.color.myGreen);' quando si usa 'colors.xml' – grim

32

È possibile impostare l'esagono a colori per qualsiasi risorsa con:

View.setBackgroundColor(Color.parseColor("#e7eecc")); 
9

Per impostare il primo colore da vedere sullo schermo, è anche possibile farlo in layout.xml rilevante (migliore progettazione) con l'aggiunta di questa proprietà al relativo Vista:

android:background="#FF00FF00" 
3

È possibile semplice utilizzo:

view.setBackgroundColor(Color.parseColor("#FFFFFF")); 
8

tenta di aggiungere:

setBackgroundColor(Color.parseColor("#FF0000")); 
5

che uso al API min 16, obiettivo 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button); 

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent)); 
+0

Di solito non ci sono molti colori predefiniti. Nuovi colori possono essere definiti in res/valori/colori come descritto qui https://developer.android.com/samples/BasicMediaRouter/res/values/colors.html – Krystian

1

Affermare con Android 6 uso ContextCompact

 view.setBackgroundColor(ContextCompat.getColor(this, R.color.your_color)); 
3
mButton.setBackgroundColor(getResources().getColor(R.color.myColor)); 
Problemi correlati