Convertir la valeur de couleur hexadécimale (#ffffff) en valeur entière


88

Je reçois des valeurs de couleur hexadécimales d'un serveur (sous cette forme #xxxxxx, par exemple #000000pour le noir)

Comment puis-je convertir cela en une valeur entière?

J'ai essayé de faire Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))pour obtenir un résultat encore plus hextastique 0x000000, mais ce n'est pas interprété comme un intici, d'autres suggestions?

Je reçois une erreur: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

J'utilise le SDK Android pour leur setBackgroundColor(int color)fonction, qui prend - comme vous l'avez peut-être deviné - une valeur de couleur entière.

C'est l'opposé de cette question: Comment convertir un entier de couleur en chaîne hexadécimale sous Android?


Pour une raison quelconque, je suis incapable de poster ... Vous y êtes presque, mais vous avez besoin de la valueOfméthode à deux arguments , où vous spécifiez l'entrée de chaîne (sans le #, bien sûr) et la base, qui spécifie la base. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Cela peut être fait avec n'importe quelle base entière! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

Oui, je n'ai pas non plus pu publier ma réponse. Mike Samuel a à peu près dit ce que j'allais dire.
ssell

Réponses:



30

La réponse est vraiment simple, dans Android si vous souhaitez convertir une couleur hexadécimale en int, utilisez simplement la classe Android Color , exemple illustré ci-dessous

c'est pour la couleur gris clair

Color.parseColor("#a8a8a8");

C'est tout et vous obtiendrez votre résultat.


Et expliquez clairement comment utiliser: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

2
merci pour la suggestion, j'ai essayé cela tout à l'heure en vain, et il s'avère qu'une fonction Android incluse était le seul type de résultat de couleur qui fonctionne, même s'ils retournent tous les deux int. Color.parseColor (myPassedColor)) Je ne pensais pas que c'était un problème spécifique à Android, mais il s'avère que c'était le cas
CQM

4
Je ne sais pas pourquoi les gens ont voté pour cela; ça ne marche pas !! Les couleurs ici sont stockées en 32 bits, donc leur impression les fait apparaître comme des longs. parseInt recherche un `- 'explicite pour désigner un négatif, et ne respecte pas le bit de signe pour les entiers ou les longs. Ainsi, il donnera le mauvais numéro.
Christian Chapman

1
@enthdegree, Pour citer l'OP, "Je reçois des valeurs de couleur hexadécimales d'un serveur (sous cette forme, #xxxxxx" donc les couleurs traitées par l'OP sont 24 bits et non 32 bits; il n'y a pas de canal alpha.
Mike Samuel

1
@AllDayAmazing, '#' n'est pas un chiffre hexadécimal, un signe ou un séparateur décimal, donc parseIntéchouera s'il le trouve sur l'entrée.
Mike Samuel

Mon erreur, je suis tellement ancré dans ce que je fais que je l'ai lu rapidement et j'ai vu parseColor(). Vous avez tout à fait raison.
AllDayAmazing

7

J'ai le même problème que celui que j'ai trouvé sous forme de couleur #AAAAAAet je veux le convertir en une forme que Android pourrait utiliser. J'ai trouvé que vous pouvez simplement utiliser 0xFFAAAAAApour qu'Android puisse automatiquement indiquer la couleur. Remarquez que le premier FFest révélateur de la alphavaleur. J'espère que cela aide


4

La vraie réponse est la plus simple et la plus simple ...

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

3

J'étais confronté au même problème. De cette façon, j'ai pu le résoudre. Comme l'a dit CQM, l'utilisation de Color.parseColor () est une bonne solution à ce problème.

Voici le code que j'ai utilisé:

this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));

Dans ce cas, mon objectif était de changer la couleur du texte du bouton (Button_C) lorsque je change la sélection de couleur de mes préférences (color_prefs).



1

Obtenez le code de couleur des préférences partagées dans la chaîne, puis convertissez-le en entier et ajoutez une couleur d'arrière-plan de mise en page:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));

0

Essayez ceci, créez un dessin dans votre ressource ...

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/white"/>
    <size android:height="20dp"
        android:width="20dp"/>
</shape>

puis utilisez ...

 Drawable mDrawable = getActivity().getResources().getDrawable(R.drawable.bg_rectangle_multicolor);
mDrawable.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_IN);
mView1.setBackground(mDrawable);

avec la couleur ... "#FFFFFF"

si la couleur est transparente, utilisez ... setAlpha

mView1.setAlpha(x); avec x float 0-1 Ej (0.9f)

Bonne chance

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.