Convierta el valor de color hexadecimal ( #ffffff ) a valor entero

4 minutos de lectura

avatar de usuario
CQM

Recibo valores de color hexadecimales de un servidor (de esta forma, #xxxxxx ejemplo #000000 para negro)

¿Cómo convierto esto en un valor entero?

traté de hacer Integer.valueOf("0x" + passedColor.substring(1, passedColor.length())) para obtener un aún más hextastic 0x000000 resultado, pero esto no se interpreta como un int aquí, alguna otra sugerencia?

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

Estoy usando el SDK de Android para su setBackgroundColor(int color) función, que toma, como habrás adivinado, un valor de color entero.

Este es el OPUESTO de esta pregunta: ¿Cómo convertir un entero de color en una cadena hexadecimal en Android?

  • Como por alguna razón no puedo publicar… Ya casi llega, pero necesita los dos argumentos valueOf método, donde especifica la entrada de cadena (sin el #, por supuesto) y la base, que especifica la base. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) ¡Esto se puede hacer con cualquier base entera! descargar.oracle.com/javase/6/docs/api/java/lang/…En t)

    – ty1824

    4 de agosto de 2011 a las 1:10


  • Posible duplicado de Cómo obtener un color de una cadena de color hexadecimal

    – usuario2340612

    7 de marzo de 2016 a las 12:54

avatar de usuario
CQM

La verdadera respuesta es usar:

Color.parseColor(myPassedColor) en android, myPassedColor siendo el hex valor como #000 o #000000 o #00000000.

Sin embargo, esta función no admite valores hexadecimales abreviados como #000.

  • Desafortunadamente, en no analiza el valor como #000. Ver documentación

    – Alex Semeniuk

    9 de enero de 2015 a las 10:13

  • @CQM cómo analizar el color hexadecimal abreviado, como #ccc. ¿Hay alguna otra manera?

    – Kavita Patil

    22 de diciembre de 2019 a las 9:38

La respuesta es realmente simple, chicos, en Android, si desea convertir el color hexadecimal en int, solo use Android Color clase, el ejemplo se muestra a continuación

esto es para color gris claro

Color.parseColor("#a8a8a8");

Eso es todo y obtendrás tu resultado.

  • Y simplemente aclare cómo usar: someText.setTextColor(Color.parseColor(“#f9e6ff”) )

    – Brian M.

    16 de septiembre de 2020 a las 2:59


avatar de usuario
mike samuel

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

  • gracias por la sugerencia, probé esto ahora sin éxito, y resulta que una función de Android incluida fue el único tipo de resultado de color que funciona, aunque ambos devuelven int. Color.parseColor(myPassedColor)) No pensé que se tratara de un problema específico de Android, pero resulta que lo era

    – CQM

    4 de agosto de 2011 a las 1:15


  • No sé por qué la gente votó esto; no funciona!! Los colores aquí se almacenan en 32 bits, por lo que imprimirlos hace que se muestren durante mucho tiempo. parseInt busca un ‘-‘ explícito para denotar un negativo, y no respeta el bit de signo para enteros o largos. Por lo tanto, dará el número equivocado.

    –Christian Chapman

    26 de enero de 2013 a las 1:25

  • @enthdegree, para citar el OP, “Recibo valores de color hexadecimales de un servidor (de esta forma, #xxxxxx”, por lo que los colores con los que trata el OP son de 24 bits, no de 32 bits; no hay canal alfa.

    –Mike Samuel

    26 de enero de 2013 a las 2:48

  • @AllDayAmazing, ‘#’ no es un dígito hexadecimal, un signo o un separador decimal, por lo que parseInt fallará si lo encuentra en la entrada.

    –Mike Samuel

    15 de septiembre de 2014 a las 3:28

  • Mi error, estoy tan arraigado en lo que estoy haciendo que lo leí rápidamente y vi parseColor(). Eres muy correcto.

    – AllDayAmazing

    15 de septiembre de 2014 a las 4:35

avatar de usuario
Fei

tengo el mismo problema que encontre algun color en forma de #AAAAAA y quiero convertir eso en una forma que Android pueda usar. Descubrí que solo puedes usar 0xFFAAAAAA para que Android pueda decir automáticamente el color. Fíjate en el primero FF es revelador alpha valor. Espero eso ayude

La verdadera respuesta es la más simple y fácil….

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

avatar de usuario
CorriendoRuedas

Estaba enfrentando el mismo problema. De esta forma pude solucionarlo. Como dijo CQM, usar Color.parseColor() es una buena solución para este problema.

Aquí está el código que usé:

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

En este caso, mi objetivo era cambiar el color del texto del Botón (Button_C) cuando cambio la selección de color de mis Preferencias (color_prefs).

avatar de usuario
mikel

Basado en la respuesta de CQM y en la respuesta de ovokerie-ogbeta a otra pregunta, se me ocurrió esta solución:

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);

¿Ha sido útil esta solución?