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?
Essayez la méthode de classe Color
:
public static int parseColor (String colorString)
Les formats pris en charge sont: #RRGGBB #AARRGGBB 'rouge', 'bleu', 'vert', 'noir', 'blanc', 'gris', 'cyan', 'Magenta', 'jaune', 'lightgray', 'darkgray '
Essayer:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
Cette question se pose pour un certain nombre de recherches liées à la couleur hexadécimale, je vais donc ajouter un résumé ici.
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);
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.
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);
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
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;
Ses
int color = Color.parseColor("colorstring");
Essaye ça:
vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
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.
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"/>
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.
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
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);