Sie können verwenden:
getResources().getColor(R.color.idname);
Überprüfen Sie hier, wie Sie benutzerdefinierte Farben definieren:
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
EDIT (1):
Da getColor(int id)
ist veraltet jetzt, diese zu verwenden:
ContextCompat.getColor(context, R.color.your_color);
(hinzugefügt in Support-Bibliothek 23)
EDIT (2):
Der folgende Code kann sowohl für Pre- als auch für Post-Marshmallow verwendet werden (API 23).
ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme
ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
android.R.color.some_color
zB:getResources().getColor(android.R.color.holo_blue_bright)
(zumindest auf API 17)ContextCompat
undResourcesCompat
? Wenn es keinen praktischen Unterschied gibt, wäre es weniger verwirrend, wenn Sie einen davon aus Ihrer Antwort entfernen würden.Basierend auf der neuen Android Support Library (und diesem Update) sollten Sie jetzt anrufen:
Laut Dokumentation :
Diese Methode wurde in API-Level 23 nicht mehr unterstützt . Verwenden Sie stattdessen getColor (int, Theme)
Es ist die gleiche Lösung für
getResources().getColorStateList(id)
:Sie müssen es so ändern:
EDIT 2019
In Bezug auf die
ThemeOverlay
Verwendung des Kontextes der nächsten Ansicht:Auf diese Weise erhalten Sie die richtige Farbe basierend auf Ihrem ThemeOverlay.
Wird besonders benötigt, wenn Sie in derselben Aktivität verschiedene Themen verwenden, z. B. ein dunkles / helles Thema. Wenn Sie mehr über Themen und Stile erfahren möchten, wird dieser Vortrag empfohlen: Entwickeln von Themen mit Stil
quelle
Theme
getColor(R.color.my_color, null)
Definieren Sie Ihre Farbe
values / color.xml
Holen Sie sich die Farbe int und stellen Sie sie ein
Siehe auch
quelle
getResources()
in einemActivity
oder verwendenFragment
?getResources()
außerhalb einer Aktivität oder eines Fragments.getResources()
ist auch als öffentliche API für alle Implementierungen von Context und auch für Views verfügbar.Bester Ansatz
Als Antwort von @sat ist ein guter Ansatz, um Farbe zu erhalten
oder verwenden Sie die folgende
getResources()
Methode , wenn Sie keinen Zugriff auf die Methode haben.Was ich tue ist
Es ist am einfachsten überall in Ihrer App zu verwenden! Selbst in der Util-Klasse oder einer Klasse, in der Sie weder Context noch getResource () haben
Problem (wenn Sie keinen Kontext haben)
Wenn Sie keinen
Context
Zugriff haben , wie eine Methode in IhrerUtil
Klasse.Nehmen Sie die folgende Methode ohne Kontext an.
Jetzt werden Sie
Context
als Parameter in dieser Methode übergeben und verwendengetResources().
Hier ist eine einzigartige Bonuslösung, mit der Sie von überall auf Ressourcen zugreifen können
Util class
. Fügen SieResources
IhrerApplication
Klasse hinzu oder erstellen Sie eine, wenn sie nicht vorhanden ist.Fügen Sie Ihrem
manifest.xml
<application
Tag ein Namensfeld hinzu. (Wenn nicht bereits hinzugefügt)Jetzt können Sie loslegen. Verwenden Sie
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
überall in der App.quelle
Ich habe aktualisiert, um
ContextCompat.getColor(context, R.color.your_color);
aber manchmal (auf einigen Geräten / Android-Versionen. Ich bin nicht sicher), dass ein NullPointerExcepiton verursacht.Damit es auf allen Geräten / Versionen funktioniert, greife ich bei einem Nullzeiger auf die alte Vorgehensweise zurück.
quelle
Resources.getColor(int, Theme)
wenn Sie können? Sie sollten keine Laufzeitausnahmen abfangen.Für weitere Informationen zu einem anderen Anwendungsfall, der dazu beitragen kann, diese Frage in den Suchergebnissen zu beantworten, wollte ich Alpha auf eine in meinen Ressourcen definierte Farbe anwenden.
Verwenden Sie die richtige Antwort von @ sat:
quelle
Einen einfacheren Weg gefunden, der auch funktioniert:
quelle
Der Zugriff auf Farben aus einer Nicht-Aktivitätsklasse kann schwierig sein. Eine der Alternativen, die ich gefunden habe, war die Verwendung
enum
.enum
bietet viel Flexibilität.quelle
Neueste Arbeitsmethode:
quelle
Wenn Ihre aktuelle min. Die API-Stufe ist 23, Sie können sie einfach so verwenden,
getColor()
wie wir sie verwenden fürgetString()
:Wenn Sie unter der API-Ebene möchten
23
, verwenden Sie einfach Folgendes :Beachten Sie jedoch, dass dies
getResources().getColor()
auf API-Ebene veraltet ist23
. In diesem Fall ersetzen Sie oben durch:ContextCompat : Hilfsprogramm für den Zugriff auf Funktionen in
Context
Wenn Sie möchten, können Sie folgende Einschränkungen
SDK_INT
vornehmen:quelle
in der Aktivität
in Fragment
zum Beispiel:
quelle