it-swarm.com.de

Android erhält Farbe als Stringwert

Wenn ich eine Farbe in Ressourcen definiert habe

<resources>
    <color name="someColor">#123456</color>
</resources>

es ist möglich, die Farbe anhand ihrer ID festzulegen, z

view.setTextColor(R.color.someColor);

Ist es auch möglich, Farbwerte aus colors.xml zu erhalten?

So etwas wie 

colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"

Wenn ja, kann jemand ein Beispiel geben?

Vielen Dank

74
Tima

Das ist deine Antwort

colorStr=getResources().getString(R.color.someColor);

sie erhalten 

 colorStr = "#123456"
119
Tanmay Mandal

Nur um der einfachen Copypasta willen:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));

Oder wenn Sie es ohne Transparenz wollen:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
115
kodi

Die oben angegebenen Antworten werden nicht aktualisiert.

Probieren Sie mal das hier an

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
23
Solidak

Ursache getResources().getColor need api> 23. Das ist also besser: Nur um das Kopieren und Einfügen zu vereinfachen:

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );

Oder wenn Sie es ohne die Transparenz wollen: `

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );

9
Honghe.Wu

Bei allen Lösungen, die hier Integer.toHexString() verwenden, unterbrechen Sie, wenn in Ihrem Hex-String führende Nullen vorhanden wären. Farben wie #0affff würden #affff ergeben. Verwenden Sie stattdessen diese:

String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)

oder mit alpha:

String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)
8
Florian M

Für API über 21 können Sie verwenden 

getString(R.color.color_name);

Dadurch wird die Farbe in einem Zeichenfolgenformat zurückgegeben. Um diese in eine Farbe im Ganzzahlformat zu konvertieren (manchmal werden nur ganze Zahlen akzeptiert),

Color.parseColor(getString(R.color.color_name));

Der obige Ausdruck gibt das ganzzahlige Äquivalent der in color.xml-Datei definierten Farbe zurück

4
Samarth S

Ich glaube nicht, dass es dafür eine Standardfunktionalität gibt. Sie können jedoch den Rückgabewert von getColor() in hex und den hex-Wert in string umwandeln.

hex 123456 = int 1193046;

1
Nick

So habe ich es gemacht:

String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);
1
giainel

Fügen Sie @SuppressLint ("ResourceType") hinzu, wenn ein Fehler auftritt. Wie unten.

private String formatUsernameAction(UserInfo userInfo, String action) {
        String username = userInfo.getUsername();
        @SuppressLint("ResourceType") String usernameColor = getContext().getResources().getString(R.color.background_button);
        return "<font color=\""+usernameColor+"\">" + username
                + "</font> <font color=\"#787f83\">" + action.toLowerCase() + "</font>";
    }
0
Tuan Nguyen