Vous pouvez utiliser:
getResources().getColor(R.color.idname);
Vérifiez ici comment définir des couleurs personnalisées:
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
EDIT (1):
Puisque getColor(int id)
est obsolète maintenant, il doit être utilisé:
ContextCompat.getColor(context, R.color.your_color);
(ajouté dans la bibliothèque de support 23)
MODIFIER (2):
Le code ci-dessous peut être utilisé à la fois avant et après la guimauve (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
aussi, par exemple:getResources().getColor(android.R.color.holo_blue_bright)
(au moins, sur API 17)ContextCompat
etResourcesCompat
? S'il n'y a pas de différence pratique, ce serait moins déroutant si vous supprimiez l'un d'eux de votre réponse.Basé sur la nouvelle bibliothèque de support Android (et cette mise à jour), vous devez maintenant appeler:
Selon la documentation :
Cette méthode est déconseillée au niveau API 23 . Utilisez getColor (int, Theme) à la place
C'est la même solution pour
getResources().getColorStateList(id)
:Vous devez le changer comme ceci:
EDIT 2019
Concernant l'
ThemeOverlay
utilisation du contexte de la vue la plus proche:Ainsi, vous obtenez la bonne couleur en fonction de votre ThemeOverlay.
Particulièrement nécessaire lorsque dans la même activité, vous utilisez différents thèmes, comme le thème sombre / clair. Si vous souhaitez en savoir plus sur les thèmes et les styles, cette présentation est suggérée: Développement de thèmes avec style
la source
Theme
peut être passé comme nul, alors appelez simplementgetColor(R.color.my_color, null)
si vous ne savez pas quel thème passer.Définissez votre couleur
values / color.xml
Obtenez la couleur et définissez-la
Voir également
la source
getResources()
dans unActivity
ouFragment
?getResources()
dehors d'une activité ou d'un fragment.getResources()
est également disponible en tant qu'API publique sur tout ce qui implémente le contexte et également sur les vues.Meilleure approche
Comme réponse @sat, une bonne approche pour obtenir des couleurs est
ou utilisez ci-dessous lorsque vous n'avez pas accès à la
getResources()
méthode.Ce que je fais c'est
Il est plus simple à utiliser n'importe où dans votre application! Même dans la classe Util ou dans toute classe où vous n'avez pas Context ou getResource ()
Problème (lorsque vous n'avez pas de contexte)
Lorsque vous n'y avez pas
Context
accès , comme une méthode dans votreUtil
classe.Supposons la méthode ci-dessous sans contexte.
Vous allez maintenant passer
Context
comme paramètre dans cette méthode et utilisergetResources().
Voici donc une solution unique en bonus grâce à laquelle vous pouvez accéder à des ressources de n'importe où
Util class
. AjoutezResources
à votreApplication
classe ou créez-en un s'il n'existe pas.Ajoutez un champ de nom à votre
manifest.xml
<application
balise. (Si pas déjà ajouté)Vous êtes maintenant prêt à partir. Utilisez
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
n'importe où dans l'application.la source
J'ai mis à jour pour utiliser
ContextCompat.getColor(context, R.color.your_color);
mais parfois (sur certains appareils / versions Android. Je ne suis pas sûr) cela provoque un NullPointerExcepiton.Donc, pour le faire fonctionner sur tous les appareils / versions, je retombe sur l'ancienne façon de le faire, dans le cas d'un pointeur nul.
la source
Resources.getColor(int, Theme)
si vous le pouvez? Vous ne devez pas intercepter les exceptions d'exécution.Pour plus d'informations sur un autre cas d'utilisation qui pourrait aider à faire apparaître cette question dans les résultats de recherche, je voulais appliquer l'alpha à une couleur définie dans mes ressources.
En utilisant la bonne réponse de @ sat:
la source
Trouvé un moyen plus simple qui fonctionne aussi:
la source
L'accès aux couleurs d'une classe non active peut être difficile. L'une des alternatives que j'ai trouvées utilisait
enum
.enum
offre beaucoup de flexibilité.la source
Méthode de travail la plus récente:
la source
Si votre min. Le niveau API est 23, vous pouvez simplement utiliser
getColor()
comme nous utilisons pourgetString()
:Si vous voulez en dessous du niveau API
23
, utilisez simplement ceci:Mais notez que
getResources().getColor()
c'est obsolète dans le niveau API23
. Dans ce cas, remplacez ci-dessus par:ContextCompat : Aide pour accéder aux fonctionnalités de
Context
Si vous voulez, vous pouvez contraindre avec
SDK_INT
comme ci-dessous:la source
en activité
en fragment
par exemple:
la source