So erhalten Sie eine Farbe aus einer hexadezimalen Farbzeichenfolge

305

Ich möchte eine Farbe aus einer Hexa-Zeichenfolge verwenden, um beispielsweise "#FFFF0000"die Hintergrundfarbe eines Layouts zu ändern. Color.HSVToColorsieht aus wie ein Gewinner, nimmt aber einen float[]als Parameter.

Bin ich der Lösung überhaupt nahe?

Johann
quelle

Antworten:

592

Versuchen Sie die ColorKlassenmethode:

public static int parseColor (String colorString)

Aus der Android-Dokumentation :

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

Jethro
quelle
4
Weiß jemand, wie man #000Werte analysiert ?
Alex Semeniuk
6
Ja, tun if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) }Sie einfach: Bitte korrigieren Sie mich, wenn ich falsch
liege
6
Um @ xdevs23 Code hinzuzufügen, ändern Sie die if-Bedingung in diese:if(colorString.length() == 4 && colorString[0] == '#')
Zac
Ihre Antwort wäre besser, wenn Sie nicht nur die Funktion zeigen, sondern auch, wie sie verwendet wird: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Yvonne Marggraf
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 (rot, blau, grün);
GTID
253

Versuchen:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
invisbo
quelle
4
Wenn Sie Xamarin verwenden, lautet der Code Android.Graphics.Color.ParseColor ("# 636161") mit "P" nach Upper
Igor Monteiro
38

Diese Frage wird für eine Reihe von Suchanfragen im Zusammenhang mit Hex-Farben gestellt, daher werde ich hier eine Zusammenfassung hinzufügen.

Farbe von int

Hex-Farben haben die Form RRGGBBoder AARRGGBB(Alpha, Rot, Grün, Blau). Nach meiner Erfahrung müssen Sie bei der intdirekten Verwendung eines AARRGGBBFormulars das vollständige Formular verwenden. Wenn Sie nur das RRGGBBFormular haben, stellen Sie es einfach voran FF, um das Alpha (Transparenz) vollständig undurchsichtig zu machen. Hier ist, wie Sie es in Code setzen würden. Die Verwendung 0xam Anfang bedeutet, dass es hexadezimal und nicht Basis 10 ist.

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

Farbe aus String

Wie andere angemerkt haben, können Sie Color.parseStringso verwenden

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

Beachten Sie, dass der String mit a beginnen muss #. Beide RRGGBBund AARRGGBBFormate werden unterstützt.

Farbe aus XML

Sie sollten Ihre Farben nach Möglichkeit aus XML beziehen. Dies ist die empfohlene Option, da es viel einfacher ist, Farbänderungen an Ihrer App vorzunehmen. Wenn Sie im gesamten Code viele Hex-Farben festlegen, ist es sehr schwierig, diese später zu ändern.

Das Android-Materialdesign hat Farbpaletten mit den bereits konfigurierten Hex-Werten.

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

Farben.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 Farbe des Hex-Werts und dann eine Komponente Ihrer App, die eine bestimmte Farbe erhalten soll. Dies macht es einfach, die Farben später anzupassen. Auch dies ist in colours.xml .

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

Wenn Sie dann die Farbe im Code festlegen möchten, gehen Sie wie folgt vor:

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

Android Vordefinierte Farben

Die Farbklasse enthält 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

Suragch
quelle
22

Konvertieren Sie diese Zeichenfolge in eine intFarbe, die in setBackgroundColorund verwendet werden kannsetTextColor

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

Die 16 bedeutet, dass es hexadezimal ist und nicht Ihre reguläre 0-9. Das Ergebnis sollte das gleiche sein wie

int color = 0xFFFF0000;
Bryan Field
quelle
Wie kann ich String color = "80000000" konvertieren? zu int color =?
Ashish Sahu
Ich denke, die String-Version sollte #80000000in diesem Fall die int-Version sein int color = 0x80000000;. Wenn das nicht funktioniert, stellen Sie eine neue Frage mit mehr Details, damit mehr Leute als ich es bemerken. Denken Sie daran, #80000000ist eine durchscheinende schwarze Farbe.
Bryan Field
Ich weiß, int wäre int color = 0x80000000, aber mein Problem ist, wie man es konvertiert ... Aber jetzt werde ich mein Problem selbst mit int color = parseColor ("#" + "80000000") lösen; ... danke für die Antwort.
Ashish Sahu
Ich habe eine Ausnahme mit Ihrem Code erhalten: java.lang.NumberFormatException: Ungültig int: "FFFF0000"
error1337
16

Es ist

int color =  Color.parseColor("colorstring");
Patricia Heimfarth
quelle
15

Versuche dies:

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

Ich benutze dies und es funktioniert hervorragend für mich, um jede gewünschte Farbe einzustellen.

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. Geben Sie dann an einer beliebigen Stelle, an der Sie diese Farbe verwenden möchten, MY_COLOR anstelle von Color.BLUE oder Color.RED oder einer der anderen statischen Farben ein, die die Farbklasse bietet.

Führen Sie einfach eine Google-Suche nach Farbkarten durch und Sie können eine Tabelle mit den richtigen RGB-Codes unter Verwendung von 0-255 finden.

Opy
quelle
7

In Xamarin Verwenden Sie dies

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

XML-Datei gespeichert unter res / values ​​/ colours.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);

Dieses 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"/>
AZ_
quelle
5

Versuchen Sie stattdessen, 0xFFF000 zu verwenden, und übergeben Sie dies an die Color.HSVToColor-Methode.

Dave Long
quelle
2
Ich würde erwarten, dass Sie dieses dritte F durch eine Null ersetzen sollten. Ich denke, im OP werden die ersten beiden F-Zeichen verwendet, um die Deckkraft einzustellen.
Bryan Field
4

Wenn Sie eine Farbe in Ihrem XML definieren und damit die Hintergrundfarbe oder etwas anderes ändern möchten, ist diese API diejenige, nach der Sie suchen:

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

In meinem Beispiel habe ich es für TestView verwendet

M.Hefny
quelle
0

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);
GTID
quelle