Wenn ich eine Farbe in Ressourcen definiert habe
<resources>
<color name="someColor">#123456</color>
</resources>
Es ist möglich, die Farbe anhand der ID festzulegen, z
view.setTextColor(R.color.someColor);
Ist es auch möglich, den Wert der Farbzeichenfolge aus color.xml abzurufen?
Etwas wie
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
Wenn ja, kann jemand ein Beispiel geben?
Danke dir
//noinspection ResourceType
direkt über Ihrer Anweisung hinzufügen .getResources().getString(0+R.color.someColor);
WerkeNur um der einfachen Copypasta willen:
Oder wenn Sie es ohne Transparenz wollen:
quelle
'#' + Integer.toHexString(getResources().getColor(R.color.someColor);
ich es verwendete , da ich es später inColor.parseColor
Die oben angegebenen Antworten werden nicht aktualisiert.
Probieren Sie mal das hier an
quelle
Alle Lösungen hier verwenden
Integer.toHexString()
break, wenn Sie führende Nullen in Ihrer Hex-Zeichenfolge haben würden. Farben wie#0affff
würden ergeben#affff
. Verwenden Sie stattdessen Folgendes:oder mit alpha:
quelle
Ursache
getResources().getColor
braucht API> 23. Das ist also besser: Nur zum einfachen Kopieren und Einfügen:Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
Oder wenn Sie es ohne Transparenz wollen: `
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
quelle
ContextCompat.getColor
nimmt nicht 3 ArgumenteFür API über 21 können Sie verwenden
Dadurch wird die Farbe in einem Zeichenfolgenformat zurückgegeben. Um dies in eine Farbe im Ganzzahlformat umzuwandeln (manchmal werden nur Ganzzahlen akzeptiert), gehen Sie wie folgt vor:
Der obige Ausdruck gibt das ganzzahlige Äquivalent der in der Datei color.xml definierten Farbe zurück
quelle
Fügen Sie @SuppressLint ("ResourceType") hinzu, wenn ein Fehler auftritt. Wie unten.
quelle
Ich glaube nicht, dass es dafür Standardfunktionen gibt. Sie können jedoch den Rückgabewert von
getColor()
in hex und den hexadezimalen Wert in string umwandeln.hex 123456 = int 1193046;
quelle
So habe ich es gemacht:
quelle
Für mich geht das!
quelle
Wenn Sie nicht verwenden möchten ,
ContextCompat
oderSuppressLint
fügen Sie einfach einestring
Ressource direkt untercolor
.Anstatt
Verwenden
Ihr Code wiederholt sich zwar, ist aber viel sauberer. Außerdem ist es fast unmöglich , das Aktualisieren
string
nach dem Ändern zu vergessen,color
da sie direkt nebeneinander liegen.quelle