110

I am receiving hex color values from a server (in this form, #xxxxxx , example #000000 for black)

How do I convert this to an integer value?

I tried doing Integer.valueOf("0x" + passedColor.substring(1, passedColor.length())) to get an even more hextastic 0x000000 result, but this isn't intepreted as an int here, any other suggestions?

I receive an error: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

I am using the Android SDK for their setBackgroundColor(int color) function, which takes - as you might have guessed - an integer color value.

This is the OPPOSITE of this question: How to convert a color integer to a hex String in Android?

Community
  • 1
  • 1
CQM
  • 42,592
  • 75
  • 224
  • 366
  • As for some reason I am unable to post... You're almost there, but you need the two-argument `valueOf` method, where you specify the string input (without the #, of course) and the radix, which specifies the base. `Integer.valueOf(passedColor.substring(1, passedColor.length()), 16)` This can be done with any integer base! http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html#valueOf(java.lang.String, int) – ty1824 Aug 04 '11 at 01:10
  • Possible duplicate of [How to get a Color from hexadecimal Color String](http://stackoverflow.com/questions/5248583/how-to-get-a-color-from-hexadecimal-color-string) – user2340612 Mar 07 '16 at 12:54

10 Answers10

216

The real answer is to use:

Color.parseColor(myPassedColor) in Android, myPassedColor being the hex value like #000 or #000000 or #00000000.

However, this function does not support shorthand hex values such as #000.

Karmic Coder
  • 17,569
  • 6
  • 32
  • 42
CQM
  • 42,592
  • 75
  • 224
  • 366
  • 9
    Unfortunately in does not parse value like `#000`. See [documentation](http://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)) – Alex Semeniuk Jan 09 '15 at 10:13
  • @CQM how to parse shorthand hex color, like `#ccc`. Is there any other way? – Kavita Patil Dec 22 '19 at 09:38
  • @KavitaPatil I haven't tested but it seems like your utility function could detect shorthand notation and then convert by duplicating each hex digit before passing to `parseColor`. See here: https://en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form – Damien Diehl May 05 '23 at 17:16
48

Answer is really simple guys, in android if you want to convert hex color in to int, just use android Color class, example shown as below

this is for light gray color

Color.parseColor("#a8a8a8");

Thats it and you will get your result.

Ashana.Jackol
  • 3,064
  • 28
  • 22
18
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
CQM
  • 42,592
  • 75
  • 224
  • 366
Mike Samuel
  • 118,113
  • 30
  • 216
  • 245
  • 2
    thanks for the suggestion, I tried this just now to no avail, and it turns out an included Android function was the only kind of color result that works, even though they both return int. Color.parseColor(myPassedColor)) I didn't think this was an android specific problem, but turns out it was – CQM Aug 04 '11 at 01:15
  • 4
    I don't know why people upvoted this; it doesn't work!! The colors here are being stored in 32 bits so printing them makes them display as longs. parseInt looks for an explicit `-' to denote a negative, and doesn't respect the sign bit for ints or longs. Thus it will give the wrong number. – Christian Chapman Jan 26 '13 at 01:25
  • 1
    @enthdegree, To quote the OP, "I am receiving hex color values from a server (in this form, #xxxxxx" so the colors the OP deals with are 24 bits not 32 bits; there is no alpha channel. – Mike Samuel Jan 26 '13 at 02:48
  • 1
    @AllDayAmazing, '#' is not a hex digit, sign, or decimal separator so `parseInt` will fail if it finds it on the input. – Mike Samuel Sep 15 '14 at 03:28
  • My mistake, I'm so ingrained in what I'm doing that I read it quickly and saw `parseColor()`. You are very correct. – AllDayAmazing Sep 15 '14 at 04:35
  • This above solution works like a charm!! You can also convert it the other way back to the hex value using the below function where intColor is the result of the above function: val hexColor = String.format("#%06X", 0xFFFFFF and intColor) – Chuka_FC May 11 '22 at 13:09
8

I have the same problem that I found some color in form of #AAAAAA and I want to conver that into a form that android could make use of. I found that you can just use 0xFFAAAAAA so that android could automatically tell the color. Notice the first FF is telling alpha value. Hope it helps

Fei
  • 1,906
  • 20
  • 36
5

The real answer is this simplest and easiest ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);
Milad Faridnia
  • 9,113
  • 13
  • 65
  • 78
3

I was facing the same problem. This way I was able to solved it. As CQM said, using Color.parseColor() is a good solution to this issue.

Here is the code I used:

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

In this case my target was to change the Button's text color (Button_C) when I change the color selection from my Preferences (color_prefs).

3

if you can pass the values as static const, you can convert the hex value to an Android (android.graphics.Color) using this online converter and put the color reference in the const, ie: color converter give me this value for this color #EE5670 = 0xFFEE5670.

static const Color redColor = const Color(0xFFEE5670);

https://convertingcolors.com/hex-color-EE5670.html?search=#EE5670

ALEXANDER LOZANO
  • 1,874
  • 3
  • 22
  • 31
2

Based on CQM's answer and on ovokerie-ogbeta's answer to another question I've come up with this 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
  • 2,756
  • 2
  • 23
  • 41
1

Get Shared Preferences Color Code in String then Convert to integer and add layout-background color:

    sharedPreferences = getSharedPreferences(mypref, Context.MODE_PRIVATE);
    String sw=sharedPreferences.getString(name, "");
    relativeLayout.setBackgroundColor(Color.parseColor(sw));
B. Go
  • 1,436
  • 4
  • 15
  • 22
0

Try this, create drawable in your resource...

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

then use...

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

with color... "#FFFFFF"

if the color is transparent use... setAlpha

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

Good Luck