2013-10-16 13 views
53

Sto provando a convertire un valore esadecimale in un int, così posso creare un nuovo colore disegnabile. Non sono sicuro che sia possibile, ma secondo la documentazione, dovrebbe. Chiede chiaramente perCrea un nuovo colore disegnabile

pubblico ColorDrawable (colore int)

aggiunte a livello di API 1 crea un nuovo ColorDrawable con il colore specificato .

Parametricolore Il colore da disegnare.

Quindi, il mio codice non funziona perché sto ricevendo un errore int non valido: "FF6666". Qualche idea?

int decode = Integer.decode("FF6666"); 
ColorDrawable colorDrawable = new ColorDrawable(decode); 
+0

Se una delle risposte fornite ha risolto la tua risposta, pensa di convalidarla come risposta accettata in modo che l'altro sappia che il tuo problema è risolto. – HpTerm

+0

C'è una bella classe di utilità android.graphics.Color che ha un metodo parseColor. Prova a utilizzarlo e non dimenticare di aggiungere il prefisso nitido (#) alla rappresentazione della stringa di colori, ad es. # FF6666 –

risposta

109

Dal momento che si sta parlando di esadecimale è necessario avviare con 0x e non dimenticare l'opacità.

Quindi, fondamentalmente: 0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666); 

È possibile anche creare un nuovo file in colors.xml/res e definire i colori come:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="mycolor">#FF6666</color> 
</resources> 

e semplicemente ottenere il colore definito nel R.color.mycolor

getResources().getColor(R.color.mycolor) 
+8

quello che mi serve è 'nuovo ColorDrawable (getResources(). GetColor (R.color.red))) grazie – shareef

+8

ContextCompat.getColor (getContext(), R.color.red) per compatibilità – toshkinl

+0

possiamo cambiare il colore di sfondo usando questo ** cd ** che è una variabile di tipo colorDrawable –

4

io penso che si debba usare:

static int parseColor (String colorString)

aggiunte a livello di API 1 Parse stringa colore pubblico, e restituire il corrispondente colore int. Se la stringa non può essere analizzata, genera un'eccezione IllegalArgumentException . I formati supportati sono: #RRGGBB #AARRGGBB rosso, blu, verde, nero, bianco, grigio, ciano, magenta, giallo, grigio chiaro, grigio scuro, grigio, grigio chiaro, grigio scuro, acqua, fucsia, lime, marrone, blu marino, oliva, viola , argento, verde acqua

9

dovrebbe essere come questo ...

ColorDrawable cd = new ColorDrawable(0xffff6666); 

Nota che ho usato 8 cifre esadecimali, non 6 hex cifre. che add to transparency

+0

Ma ti piacerebbe avere tali valori in file 'res' appropriati, non codificati. La risposta di Enrichman è completa :) – aMiGo

+0

Come viene usato 'cd' in relazione a' Toast'? – Azurespot

9

Per l'utilizzo con ContextCompat e rehuse il colore si può fare qualcosa di simile:

ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white)); 
1

Con followingthe sopra consulenza, di essere un riassunto di questa domanda:

  1. ColorDrawable colorDrawable = nuovo ColorDrawable (Colore.parseColor ("# ce9b2c")); `

  2. ColorDrawable colorDrawable = new ColorDrawable (0xFFCE9B2C); Nota: ci sono 8 cifre esadecimali, non 6 cifre esadecimali, che non funzionano. Case tutto

  3. ColorDrawable colorDrawable = new ColorDrawable (ContextCompat.getColor (mContext, R.color.default_color));

Selezionare per voi!

Problemi correlati