2013-10-16 7 views
53

Ich versuche, einen Hex-Wert in einen Int zu konvertieren, so dass ich eine neue Farbe erstellen kann. Ich bin mir nicht sicher, ob das möglich ist, aber laut der Dokumentation sollte es so sein. Es fragt einfach fürErstellen Sie eine neue Farbe zeichnen

public ColorDrawable (int Farbe)

Added in API-Ebene 1 Erstellt einen neuen ColorDrawable mit der angegebenen Farbe.

ParameterFarbe Die Farbe zu zeichnen.

Also, mein Code funktioniert nicht, weil ich einen ungültigen Int: "FF6666" -Fehler bekomme. Irgendwelche Ideen?

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

Wenn eine der Antworten Ihre Antwort gelöst hat, denken Sie daran, sie als akzeptierte Antwort zu validieren, damit der andere weiß, dass Ihr Problem gelöst ist. – HpTerm

+0

Es gibt eine nette Dienstprogrammklasse android.graphics.Color, die eine Methode parseColor haben. Versuchen Sie es stattdessen und vergessen Sie nicht, das Zeichen (#) an Ihre Farbzeichenfolge anzuhängen, z. # FF6666 –

Antwort

109

Da Sie über hex sprechen Sie mit 0x beginnen und nicht zu vergessen die Opazität.

Also im Grunde: 0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666); 

Sie können auch eine neue Datei Colors.xml in/res erstellen und definieren Sie die Farben wie:

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

und einfach die Farbe erhalten definiert in R.color.mycolor

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

was ich brauchte ist 'neue ColorDrawable (getResources(). GetColor (R.color.red)))' Danke – shareef

+8

ContextCompat.getColor (getContext(), R.color.red) für Kompatibilität – toshkinl

+0

können wir Hintergrundfarbe ändern mit dieser ** cd **, die colorDrawable Typ Variable ist –

4

Ich denke, Sie müssen verwenden:

public static int parseColor (String Farbzeichen)

Added in API-Ebene 1 Parse die Farb string, und gibt die entsprechenden farb Int. Wenn die Zeichenfolge nicht analysiert werden kann, wird eine IllegalArgumentException-Ausnahme ausgelöst. Unterstützte Formate sind: #RRGGBB #AARRGGBB rot, blau, grün, schwarz, weiß, grau, cyan, magenta, gelb, hellgrau, dunkelgrau, grau, hellgrau, dunkelgrau, aquamarin, fuschia, limette, kastanienbraun, navy, oliv, lila

, Silber, teal
9

Es sollte so sein ...

ColorDrawable cd = new ColorDrawable(0xffff6666); 

Hinweis I 8 hexadezimale Ziffern verwendet wird, nicht mehr als 6 Hexadezimalzeichens. die add to transparency

+0

Aber Sie möchten solche Werte in entsprechenden 'res' Dateien haben, nicht fest codiert. Enrichman Antwort ist abgeschlossen :) – aMiGo

+0

Wie wird 'cd' in Bezug auf' Toast' verwendet? – Azurespot

9

Für mit ContextCompat mit und rehuse die Farbe, die Sie so etwas tun kann:

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

Durch followingthe über Beratung, eine Zusammenfassung dieser Frage zu sein:

  1. ColorDrawable colorDrawable = neuer ColorDrawable (Farbe.parseColor ("# ce9b2c")); `

  2. ColorDrawable colorDrawable = new ColorDrawable (0xFFCE9B2C); Hinweis: Es gibt 8 Hex-Ziffern, nicht 6 Hex-Ziffern, die nicht funktionieren. Fall alle

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

Auswählen bis zu Ihnen!