Możesz użyć:
getResources().getColor(R.color.idname);
Sprawdź tutaj, jak zdefiniować niestandardowe kolory:
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
EDYCJA (1):
Ponieważ getColor(int id)
jest już przestarzałe , należy go użyć:
ContextCompat.getColor(context, R.color.your_color);
(dodano w bibliotece wsparcia 23)
EDYCJA (2):
Poniższy kod może być używany zarówno przed, jak i po Marshmallow (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
również na przykład:getResources().getColor(android.R.color.holo_blue_bright)
(przynajmniej na API 17)ContextCompat
iResourcesCompat
? Jeśli nie ma praktycznej różnicy, byłoby mniej mylące, gdybyś usunął jeden z nich z odpowiedzi.W oparciu o nową bibliotekę obsługi Androida (i tę aktualizację) teraz powinieneś zadzwonić:
Zgodnie z dokumentacją :
Ta metoda została uznana za przestarzałą na poziomie API 23 . Zamiast tego użyj getColor (int, Theme)
Jest to to samo rozwiązanie dla
getResources().getColorStateList(id)
:Musisz to zmienić w następujący sposób:
EDYCJA 2019
Jeśli chodzi o
ThemeOverlay
wykorzystanie kontekstu najbliższego widoku:W ten sposób uzyskasz odpowiedni kolor w oparciu o ThemeOverlay.
Szczególnie potrzebne, gdy w tej samej aktywności używasz różnych motywów, takich jak motyw ciemno / jasny. Jeśli chcesz dowiedzieć się więcej o motywach i stylach, ta rozmowa jest sugerowana: Rozwijanie motywów ze stylem
źródło
Theme
można przekazać jako zero, więc zadzwoń,getColor(R.color.my_color, null)
jeśli nie masz pewności, który motyw należy przekazać.Określ swój kolor
wartości / color.xml
Uzyskaj kolor int i ustaw go
Zobacz też
źródło
getResources()
wActivity
lubFragment
?getResources()
poza działaniem lub fragmentem.getResources()
jest również dostępny jako publiczny interfejs API we wszystkich elementach implementujących kontekst, a także w widokach.Najlepsze podejście
W odpowiedzi @sat dobrym podejściem jest uzyskanie koloru
lub użyj poniżej, gdy nie masz dostępu do
getResources()
metody.To co robię jest
Jest najprostszy w użyciu w dowolnym miejscu w aplikacji! Nawet w klasie Util lub dowolnej klasie, w której nie masz Context lub getResource ()
Problem (gdy nie masz kontekstu)
Kiedy nie masz
Context
dostępu , jak metoda w swojejUtil
klasie.Załóżmy poniższą metodę bez kontekstu.
Teraz przejdziesz
Context
jako parametr w tej metodzie i użyjeszgetResources().
Oto wyjątkowe rozwiązanie premiowe, dzięki któremu można uzyskać dostęp do zasobów z dowolnego miejsca
Util class
. DodajResources
do swojejApplication
klasy lub Utwórz, jeśli nie istnieje.Dodaj pole nazwy do
manifest.xml
<application
tagu. (Jeśli jeszcze nie dodano)Teraz możesz już iść. Używaj w
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
dowolnym miejscu aplikacji.źródło
Zaktualizowałem, aby użyć,
ContextCompat.getColor(context, R.color.your_color);
ale czasami (na niektórych urządzeniach / wersjach Androida. Nie jestem pewien), który powoduje NullPointerExcepiton.Aby więc działało na wszystkich urządzeniach / wersjach, wracam do starego sposobu robienia tego, w przypadku wskaźnika zerowego.
źródło
Resources.getColor(int, Theme)
jeśli możesz? Nie należy wychwytywać wyjątków czasu wykonywania.Aby uzyskać więcej informacji na temat innego przypadku użycia, który może pomóc znaleźć to pytanie w wynikach wyszukiwania, chciałem zastosować alfa do koloru zdefiniowanego w moich zasobach.
Używając poprawnej odpowiedzi @ sat:
źródło
Znaleziono łatwiejszy sposób, który również działa:
źródło
Dostęp do kolorów z klasy bez aktywności może być trudny. Jedną z alternatyw, które znalazłem, było użycie
enum
.enum
oferuje dużą elastyczność.źródło
Najnowsza metoda pracy:
źródło
Jeśli twój obecny min. Poziom interfejsu API to 23, możesz po prostu używać
getColor()
tak, jak my używamy dogetString()
:Jeśli chcesz poniżej poziomu interfejsu API
23
, użyj tego:Należy jednak pamiętać, że
getResources().getColor()
jest to przestarzałe na poziomie interfejsu API23
. W takim przypadku zamień powyżej na:ContextCompat : Pomocnik do uzyskiwania dostępu do funkcji w
Context
Jeśli chcesz, możesz ograniczyć za pomocą
SDK_INT
:źródło
w działalności
we fragmencie
na przykład:
źródło