wake-up-neo.net

So erhalten Sie eine Farbe aus einer hexadezimalen Farbfolge

Ich möchte eine Farbe aus einem Hexa-String wie "#FFFF0000" verwenden, um (z. B.) die Hintergrundfarbe eines Layouts zu ändernColor.HSVToColor sieht aus wie ein Gewinner, aber er benötigt einen float[] als Parameter.

Bin ich der Lösung überhaupt nahe?

253
Johann

Versuchen Sie die Color-Klassenmethode:

public static int parseColor (String colorString)

Von Android Dokumentation :

Unterstützte Formate sind: #RRGGBB #AARRGGBB 'rot', 'blau', 'grün', 'schwarz', 'weiß', 'grau', 'cyan', 'Magenta', 'gelb', 'hellgrau', 'dunkelgrau ' 

516
jethro

Versuchen:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
212
invisbo

Diese Frage wird für eine Reihe von Suchen in Bezug auf die Hex-Farbe angezeigt. Ich werde hier eine Zusammenfassung hinzufügen.

Farbe von int

Hex-Farben haben die Form RRGGBB oder AARRGGBB (Alpha, Rot, Grün, Blau). Meiner Erfahrung nach müssen Sie, wenn Sie eine int direkt verwenden, das vollständige AARRGGBB-Formular verwenden. Wenn Sie nur über das Formular RRGGBB verfügen, fügen Sie einfach FF ein, um das Alpha (Transparenz) vollständig undurchsichtig zu machen. So würden Sie es im Code einstellen. Die Verwendung von 0x am Anfang bedeutet, dass es hexadezimal ist und nicht Basis 10.

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);

Farbe von String

Wie bereits erwähnt, können Sie Color.parseString so verwenden

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);

Beachten Sie, dass der String mit einem # beginnen muss. Die Formate RRGGBB und AARRGGBB werden unterstützt.

Farbe aus XML

Sie sollten Ihre Farben eigentlich immer aus XML beziehen. Dies ist die empfohlene Option, da es wesentlich einfacher ist, Farbänderungen an Ihrer App vorzunehmen. Wenn Sie im gesamten Code viele Hex-Farben festlegen, ist es ein großer Schmerz, diese später ändern zu müssen.

Android-Materialdesign verfügt über Farbpaletten mit bereits konfigurierten Hex-Werten. 

Diese Themenfarben werden in Ihrer App verwendet und sehen folgendermaßen aus:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

Wenn Sie zusätzliche Farben benötigen, sollten Sie Ihre Farbe in zwei Schritten in xml definieren. Benennen Sie zuerst die Hex-Wert-Farbe und dann eine Komponente Ihrer App, die eine bestimmte Farbe erhalten soll. Dadurch können Sie die Farben später leicht anpassen. Dies ist wieder in colors.xml.

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

Wenn Sie die Farbe im Code festlegen möchten, führen Sie folgende Schritte aus:

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);

Android Vordefinierte Farben

Die Color-Klasse verfügt über eine Reihe vordefinierter Farbkonstanten. Sie können es so verwenden.

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);

Andere Farben sind 

  • Color.BLACK
  • Color.BLUE
  • Color.CYAN
  • Color.DKGRAY
  • Color.GRAY
  • Color.GREEN
  • Color.LTGRAY
  • Color.Magenta
  • Color.RED
  • Color.TRANSPARENT
  • Color.WHITE
  • Color.YELLOW

Anmerkungen

22
Suragch

Konvertieren Sie diese Zeichenfolge in eine int-Farbe, die in setBackgroundColor und setTextColor verwendet werden kann.

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

Die 16 bedeutet, es ist hexadezimal und nicht die normale 0-9. Das Ergebnis sollte dasselbe sein wie 

int color = 0xFFFF0000;
20
George Bailey

Es ist

int color =  Color.parseColor("colorstring");
13
Patricia Beier

Versuche dies:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
11
MindBrain

Ich benutze dies und es funktioniert hervorragend für mich, wenn ich eine beliebige Farbe einstellen möchte.

public static final int MY_COLOR = Color.rgb(255, 102, 153);

Stellen Sie die Farben mit 0-255 für jedes Rot, Grün und Blau ein, und legen Sie an beliebiger Stelle einfach MY_COLOR anstelle von Color.BLUE oder Color.RED oder einer der anderen statischen Farben der Color-Klasse fest.

Führen Sie einfach eine Google-Suche nach Farbtabellen durch und Sie können mit 0-255 ein Diagramm mit den richtigen RGB-Codes finden.

10
Opy

XML-Datei gespeichert unter res/values ​​/ colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Dieser Anwendungscode ruft die Farbressource ab:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Diese Layout-XML wendet die Farbe auf ein Attribut an:

<TextView
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:textColor="@color/translucent_red"
    Android:text="Hello"/>
5
AZ_

In Xamarin Verwenden Sie dies

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

Verwenden Sie stattdessen 0xFFF000 und übergeben Sie das in die Color.HSVToColor-Methode.

4
Dave Long

Wenn Sie in Ihrem XML eine Farbe definieren und diese zum Ändern der Hintergrundfarbe verwenden möchten, suchen Sie nach dieser API:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

In meinem Beispiel habe ich es für TestView verwendet

3
M.Hefny

Für verkürzten Hex-Code 

int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
0
GTID