Konvertieren Sie den Hex-Farbwert (#ffffff) in einen ganzzahligen Wert


86

Ich erhalte Hex-Farbwerte von einem Server (in dieser Form #xxxxxxbeispielsweise #000000für Schwarz).

Wie konvertiere ich dies in einen ganzzahligen Wert?

Ich habe versucht Integer.valueOf("0x" + passedColor.substring(1, passedColor.length())), ein noch hextastischeres 0x000000Ergebnis zu erzielen , aber dies wird nicht als inthier interpretiert , irgendwelche anderen Vorschläge?

Ich erhalte eine Fehlermeldung: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

Ich verwende das Android SDK für ihre setBackgroundColor(int color)Funktion, die - wie Sie vielleicht vermutet haben - einen ganzzahligen Farbwert annimmt.

Dies ist das Gegenteil dieser Frage: Wie konvertiere ich eine Farb-Ganzzahl in eine Hex-Zeichenfolge in Android?


Aus irgendeinem Grund kann ich nichts posten ... Sie sind fast da, aber Sie benötigen die valueOfMethode mit zwei Argumenten , bei der Sie die Zeichenfolgeneingabe (natürlich ohne #) und den Radix angeben, der die Basis angibt. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Dies kann mit jeder ganzzahligen Basis erfolgen! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

Ja, ich konnte meine Antwort auch nicht posten. Mike Samuel sagte ziemlich genau, was ich sagen würde.
Verkaufen

Antworten:


179

Die wirkliche Antwort lautet:

Color.parseColor(myPassedColor)in Android myPassedColorist der hexWert wie #000oder #000000oder #00000000.

Diese Funktion unterstützt jedoch keine Hexadezimalwerte wie #000.


9
Leider analysiert in nicht Wert wie #000. Siehe Dokumentation
Alex Semeniuk

@CQM, wie man kurze Hex-Farben analysiert, wie #ccc. Gibt es einen anderen Weg?
Kavita_p

25

Die Antwort ist sehr einfach Leute, in android , wenn Sie hex Farbe in zu int konvertieren möchten, verwenden Sie einfach android Farbklasse, Beispiel gezeigt , wie unten

Dies ist für hellgraue Farbe

Color.parseColor("#a8a8a8");

Das ist es und Sie werden Ihr Ergebnis erhalten.


14
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

2
Vielen Dank für den Vorschlag, ich habe dies gerade ohne Erfolg versucht, und es stellte sich heraus, dass eine enthaltene Android-Funktion die einzige Art von Farbergebnis war, die funktioniert, obwohl beide int zurückgeben. Color.parseColor (myPassedColor)) Ich dachte nicht, dass dies ein
androidspezifisches

4
Ich weiß nicht, warum die Leute dies positiv bewertet haben. es funktioniert nicht !! Die Farben hier werden in 32 Bit gespeichert, sodass sie beim Drucken als Long angezeigt werden. parseInt sucht nach einem expliziten "-", um ein Negativ zu kennzeichnen, und berücksichtigt das Vorzeichenbit für Ints oder Longs nicht. Somit wird die falsche Nummer angegeben.
Christian Chapman

1
@enthdegree, Um das OP zu zitieren: "Ich empfange Hex-Farbwerte von einem Server (in dieser Form #xxxxxx"), sodass die Farben, mit denen sich das OP befasst, 24 Bit und nicht 32 Bit sind; es gibt keinen Alphakanal.
Mike Samuel

1
@AllDayAmazing, '#' ist keine hexadezimale Ziffer, kein Vorzeichen oder kein Dezimaltrennzeichen und schlägt daher parseIntfehl, wenn es in der Eingabe gefunden wird.
Mike Samuel

Mein Fehler, ich bin so tief verwurzelt in dem, was ich tue, dass ich es schnell las und sah parseColor(). Du bist sehr richtig.
AllDayAmazing

7

Ich habe das gleiche Problem, dass ich etwas Farbe in Form von gefunden habe #AAAAAAund ich möchte das in eine Form umwandeln, die Android verwenden könnte. Ich fand, dass Sie nur verwenden können, 0xFFAAAAAAdamit Android automatisch die Farbe erkennen kann. Beachten Sie, dass der erste Wert FFaussagt alpha. Ich hoffe es hilft


4

Die wirkliche Antwort ist diese einfachste und einfachste ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

3

Ich hatte das gleiche Problem. Auf diese Weise konnte ich es lösen. Wie CQM sagte, ist die Verwendung von Color.parseColor () eine gute Lösung für dieses Problem.

Hier ist der Code, den ich verwendet habe:

this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));

In diesem Fall war es mein Ziel, die Textfarbe der Schaltfläche (Button_C) zu ändern, wenn ich die Farbauswahl in meinen Einstellungen (color_prefs) ändere.


1

Basierend auf CQM ‚s Antwort und auf ovokerie-ogbeta ‘ s Antwort auf eine andere Frage ich mit dieser Lösung kommen haben:

if (colorAsString.length() == 4) { // #XXX
    colorAsString = colorAsString.replaceAll("#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])", "#$1$1$2$2$3$3");
}

int color = Color.parseColor(colorAsString);

1

Holen Sie sich den Farbcode für gemeinsame Einstellungen in String und konvertieren Sie ihn dann in eine Ganzzahl und fügen Sie die Layout-Hintergrundfarbe hinzu:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));

0

Versuchen Sie dies, erstellen Sie Drawable in Ihrer Ressource ...

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/white"/>
    <size android:height="20dp"
        android:width="20dp"/>
</shape>

dann benutze...

 Drawable mDrawable = getActivity().getResources().getDrawable(R.drawable.bg_rectangle_multicolor);
mDrawable.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_IN);
mView1.setBackground(mDrawable);

mit Farbe ... "#FFFFFF"

Wenn die Farbe transparent ist, verwenden Sie ... setAlpha

mView1.setAlpha(x); mit x float 0-1 Ej (0.9f)

Viel Glück

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.