web-dev-qa-db-fra.com

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

J'aimerais utiliser une couleur d'une chaîne hexa telle que "#FFFF0000" pour (par exemple) changer la couleur d'arrière-plan d'une mise en page .Color.HSVToColor ressemble à un gagnant, mais il prend un float[] en tant que paramètre.

Suis-je près de la solution?

253
Johann

Essayez la méthode de classe Color:

public static int parseColor (String colorString)

De documentation Android :

Les formats pris en charge sont: #RRGGBB #AARRGGBB 'rouge', 'bleu', 'vert', 'noir', 'blanc', 'gris', 'cyan', 'Magenta', 'jaune', 'lightgray', 'darkgray ' 

516
jethro

Essayer:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
212
invisbo

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 int

Les couleurs hexadécimales prennent la forme RRGGBB ou AARRGGBB (alpha, rouge, vert, bleu). D'après mon expérience, lorsque vous utilisez directement une int, vous devez utiliser le formulaire complet AARRGGBB. Si vous avez uniquement le formulaire RRGGBB, il suffit de le préfixer avec FF pour rendre l'alpha (transparence) totalement opaque. Voici comment vous le définissez dans le code. Utiliser 0x au début signifie qu’il est hexadécimal et non en base 10.

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

Couleur de String

Comme d'autres l'ont déjà noté, vous pouvez utiliser Color.parseString comme suit

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

Notez que la chaîne doit commencer par un #. Les formats RRGGBB et AARRGGBB sont pris en charge.

Couleur à partir de XML

Vous devriez réellement obtenir vos couleurs de XML autant que possible. Cette option est recommandée car il est beaucoup plus facile d’apporter des modifications de couleur à votre application. Si vous définissez beaucoup de couleurs hexadécimales dans votre code, il est très pénible d'essayer de les changer plus tard.

La conception du matériel Android a des palettes de couleurs avec les valeurs hexa déjà configurées. 

Ces couleurs de thème sont utilisées dans votre application et se présentent comme suit:

colors.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, il est conseillé de définir votre couleur en deux étapes au format xml. Nommez d'abord la couleur de la valeur hexadécimale, puis nommez un composant de votre application qui devrait avoir une certaine couleur. Cela facilite l'ajustement des couleurs plus tard. Encore une fois, cela se trouve dans colors.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);

Les 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

22
Suragch

Convertir cette chaîne en une couleur int pouvant être utilisée dans setBackgroundColor et setTextColor

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

Le 16 signifie que c'est hexadécimal et non votre 0-9 normal. Le résultat devrait être le même que 

int color = 0xFFFF0000;
20
George Bailey

Ses

int color =  Color.parseColor("colorstring");
13
Patricia Beier

Essaye ça:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
11
MindBrain

J'utilise ceci et cela fonctionne très bien pour définir la couleur de mon choix.

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

Définissez les couleurs à l'aide de 0 à 255 pour chaque rouge, vert et bleu, puis utilisez la couleur MY_COLOR au lieu de Color.BLUE ou Color.RED ou de l'une des autres couleurs statiques proposées par la classe Color.

Il suffit de faire une recherche Google sur la charte de couleurs et vous pourrez trouver une charte avec les codes RVB corrects en utilisant 0-255.

10
Opy

Fichier XML enregistré dans res/values ​​/ colors.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 de couleur:

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

Cette mise en page XML applique la couleur à un attribut:

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

En Xamarin Utilisez ceci

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

Essayez plutôt d’utiliser 0xFFF000 et transmettez-le à la méthode Color.HSVToColor.

4
Dave Long

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

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

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

3
M.Hefny

Pour le code hexadécimal 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);
0
GTID