So erhalten Sie eine Farbe aus einer hexadezimalen Farbzeichenfolge


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' '


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"));

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


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;

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


15

Versuche dies:

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

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.


7

In Xamarin Verwenden Sie dies

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

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"/>

5

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


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


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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.