Comment obtenir une couleur à partir d'une chaîne de couleur hexadécimale

305

Je voudrais utiliser une couleur d'une chaîne hexa comme "#FFFF0000"pour (par exemple) changer la couleur d'arrière-plan d'une mise en page. Color.HSVToColorressemble à un gagnant mais il prend float[]un paramètre.

Suis-je proche de la solution?

Johann
la source

Réponses:

592

Essayez Colorla méthode de classe:

public static int parseColor (String colorString)

Depuis la documentation Android :

Les formats pris en charge sont: #RRGGBB #AARRGGBB 'rouge', 'bleu', 'vert', 'noir', 'blanc', 'gris', 'cyan', 'magenta', 'jaune', 'gris clair', 'gris foncé "

jethro
la source
4
Quelqu'un sait comment analyser les #000valeurs?
Alex Semeniuk
6
Oui, faites juste if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) }
:,
6
Pour ajouter au code @ xdevs23, changez la condition if en ceci:if(colorString.length() == 4 && colorString[0] == '#')
Zac
Votre réponse serait meilleure si vous montriez non seulement la fonction, mais aussi comment l'utiliser: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Yvonne Marggraf
int red = colorString.charAt (1) == '0'? 0: 255; int blue = colorString.charAt (2) == '0'? 0: 255; int green = colorString.charAt (3) == '0'? 0: 255; Color.rgb (rouge, bleu, vert);
GTID
253

Essayer:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
invisbo
la source
4
si vous utilisez xamarin .. le code est ce Android.Graphics.Color.ParseColor ("# 636161") avec "P" à Upper
Igor Monteiro
38

Cette question se pose pour un certain nombre de recherches liées à la couleur hexadécimale, je vais donc ajouter un résumé ici.

Couleur de l'int

Les couleurs hexadécimales prennent la forme RRGGBBou AARRGGBB(alpha, rouge, vert, bleu). D'après mon expérience, lorsque vous utilisez intdirectement un , vous devez utiliser le AARRGGBBformulaire complet . Si vous n'avez que le RRGGBBformulaire, préfixez-le avec FFpour rendre l'alpha (transparence) complètement opaque. Voici comment vous le définiriez dans le code. Utiliser 0xau début signifie qu'il est hexadécimal et non en base 10.

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);

Couleur de la chaîne

Comme d'autres l'ont noté, vous pouvez utiliser Color.parseStringcomme ça

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);

Notez que la chaîne doit commencer par un #. Les formats RRGGBBet AARRGGBBsont pris en charge.

Couleur à partir de XML

Vous devriez réellement obtenir vos couleurs à partir de XML dans la mesure du possible. Il s'agit de l'option recommandée, car elle facilite considérablement les changements de couleur dans votre application. Si vous définissez beaucoup de couleurs hexadécimales dans votre code, il est très difficile d'essayer de les modifier plus tard.

La conception de matériaux Android a des palais de couleurs avec les valeurs hexadécimales déjà configurées.

Ces couleurs de thème sont utilisées dans votre application et ressemblent à ceci:

colours.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

Si vous avez besoin de couleurs supplémentaires, une bonne pratique à suivre est de définir votre couleur en deux étapes en xml. Nommez d'abord la couleur de la valeur hexadécimale, puis nommez un composant de votre application qui devrait obtenir une certaine couleur. Cela facilite le réglage ultérieur des couleurs. Encore une fois, c'est dans colours.xml .

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

Ensuite, lorsque vous souhaitez définir la couleur dans le code, procédez comme suit:

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);

Couleurs prédéfinies Android

La classe Color est fournie avec un certain nombre de constantes de couleur prédéfinies. Vous pouvez l'utiliser comme ça.

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);

D'autres couleurs sont

  • Color.BLACK
  • Color.BLUE
  • Color.CYAN
  • Color.DKGRAY
  • Color.GRAY
  • Color.GREEN
  • Color.LTGRAY
  • Color.MAGENTA
  • Color.RED
  • Color.TRANSPARENT
  • Color.WHITE
  • Color.YELLOW

Remarques

Suragch
la source
22

Convertissez cette chaîne en une intcouleur qui peut être utilisée dans setBackgroundColoretsetTextColor

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

Le 16 signifie qu'il est hexadécimal et non votre 0-9 habituel. Le résultat doit être le même que

int color = 0xFFFF0000;
Bryan Field
la source
comment puis-je convertir String color = "80000000"; en couleur int =?
Ashish Sahu
Je pense que la version chaîne pourrait être #80000000dans ce cas, la version int int color = 0x80000000;. Si cela ne fonctionne pas, postez une nouvelle question avec plus de détails afin que plus de gens que moi le remarquent. Gardez à l'esprit #80000000est une couleur noire translucide.
Bryan Field
Je sais que int serait int color = 0x80000000 mais mon problème est de savoir comment le convertir ... Mais maintenant, je vais résoudre mon problème avec int color = parseColor ("#" + "80000000"); ... merci pour la réponse.
Ashish Sahu
J'ai eu une exception en utilisant votre code: java.lang.NumberFormatException: Int invalide: "FFFF0000"
error1337
16

Ses

int color =  Color.parseColor("colorstring");
Patricia Heimfarth
la source
15

Essaye ça:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
MindBrain
la source
12

J'utilise cela et cela fonctionne très bien pour moi pour définir la couleur que je veux.

public static final int MY_COLOR = Color.rgb(255, 102, 153);

Définissez les couleurs en utilisant 0-255 pour chaque rouge, vert et bleu, puis partout où vous voulez que cette couleur soit utilisée, mettez simplement MY_COLOR au lieu de Color.BLUE ou Color.RED ou l'une des autres couleurs statiques proposées par la classe Color.

Faites simplement une recherche Google pour le nuancier et vous pouvez trouver un diagramme avec les bons codes RVB en utilisant 0-255.

Opy
la source
7

Dans Xamarin Utilisez ceci

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
Shanmugasundharam
la source
6

Fichier XML enregistré dans res / values ​​/ colours.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Ce code d'application récupère la ressource couleur:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Ce XML de mise en page applique la couleur à un attribut:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>
AZ_
la source
5

Essayez d'utiliser 0xFFF000 à la place et transmettez-le à la méthode Color.HSVToColor.

Dave Long
la source
2
Je suppose que vous devriez remplacer ce troisième F par un zéro. Dans l'OP, je pense que les deux premiers caractères F sont utilisés pour définir l'opacité.
Bryan Field
4

Si vous définissez une couleur dans votre XML et souhaitez l'utiliser pour changer la couleur d'arrière-plan ou quelque chose, cette API est celle que vous recherchez:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

Dans mon échantillon, je l'ai utilisé pour TestView

M.Hefny
la source
0

Pour un code Hex raccourci

int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
GTID
la source