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?

CQM
la source
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
Copie

Réponses:

182

La vraie réponse est d'utiliser:

Color.parseColor(myPassedColor)sous Android, myPassedColorétant la hexvaleur comme #000ou #000000ou #00000000.

Cependant, cette fonction ne prend pas en charge les valeurs hexadécimales abrégées telles que #000.

CQM
la source
9
Malheureusement, dans n'analyse pas la valeur comme #000. Voir la documentation
Alex Semeniuk
@CQM comment analyser la couleur hexadécimale abrégée, comme #ccc. Est-ce qu'il y a un autre moyen?
Kavita_p
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.

Ashana.Jackol
la source
Et expliquez clairement comment utiliser: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M
15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
Mike Samuel
la source
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

Fei
la source
4

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

String white = "#ffffff";
int whiteInt = Color.parseColor(white);
Milad Faridnia
la source
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).

Roues de course
la source
1

Sur la base de CQM « s réponse et ovokerie-ogbeta » s réponse à une autre question que je suis venu avec cette solution:

if (colorAsString.length() == 4) { // #XXX
    colorAsString = colorAsString.replaceAll("#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])", "#$1$1$2$2$3$3");
}

int color = Color.parseColor(colorAsString);
MikeL
la source
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));
Choudry Zaman
la source
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

Gaston Cufre
la source