Convierta el valor de color hexadecimal (#ffffff) en un valor entero


88

Recibo valores de color hexadecimal de un servidor (en este formulario #xxxxxx, ejemplo #000000para negro)

¿Cómo convierto esto a un valor entero?

Intenté hacer Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))para obtener un resultado aún más hextástico 0x000000, pero esto no se interpreta como un intaquí, ¿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.

Esto es lo OPUESTO de esta pregunta: ¿Cómo convertir un número entero de color en una cadena hexadecimal en Android?


Por alguna razón, no puedo publicar ... Ya casi está, pero necesita el valueOfmétodo de dos argumentos , 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! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824

Sí, tampoco pude publicar mi respuesta. Mike Samuel prácticamente dijo lo que iba a decir.
vender

Respuestas:



30

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

esto es para el color gris claro

Color.parseColor("#a8a8a8");

Eso es todo y obtendrás tu resultado.


Y aclare cómo usar: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

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

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

4
No sé por qué la gente votó a favor de esto; no funciona !! Los colores aquí se almacenan en 32 bits, por lo que imprimirlos hace que se muestren como largos. parseInt busca un `- 'explícito para denotar un negativo, y no respeta el bit de signo para ints o longs. Por lo tanto, dará el número incorrecto.
Christian Chapman

1
@enthdegree, para citar el OP, "Estoy recibiendo valores de color hexadecimales de un servidor (en este formulario, #xxxxxx", por lo que los colores con los que trata el OP son 24 bits, no 32 bits; no hay canal alfa.
Mike Samuel

1
@AllDayAmazing, '#' no es un dígito hexadecimal, un signo o un separador decimal, por parseIntlo que fallará si lo encuentra en la entrada.
Mike Samuel

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

7

Tengo el mismo problema en el que encontré algún color en forma #AAAAAAy quiero convertirlo en una forma que Android pueda utilizar. Descubrí que puedes usarlo 0xFFAAAAAApara que Android pueda decir automáticamente el color. Note que el primero FFes revelador alpha. Espero eso ayude


4

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

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

3

Estaba enfrentando el mismo problema. De esta manera pude resolverlo. Como dijo CQM, usar Color.parseColor () es una buena solución a 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).


1

Sobre la base de CQM 's respuesta y en ovokerie-ogbeta ' s respuesta a otra pregunta se me ha ocurrido con 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);

1

Obtenga el código de color de preferencias compartidas en cadena, luego conviértalo a entero y agregue color de fondo de diseño:

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

0

Prueba esto, crea dibujables en tu recurso ...

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

luego usa ...

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

con color ... "#FFFFFF"

si el color es transparente use ... setAlpha

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

Buena suerte

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.