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?

CQM
fuente
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:

183

La verdadera respuesta es usar:

Color.parseColor(myPassedColor)en Android, myPassedColorsiendo el hexvalor como #000o #000000o #00000000.

Sin embargo, esta función no admite valores hexadecimales taquigráficos como #000.

CQM
fuente
9
Desafortunadamente, no analiza el valor como #000. Ver documentación
Alex Semeniuk
@CQM cómo analizar el color hexadecimal abreviado, como #ccc. ¿Hay alguna otra manera?
Kavita_p
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.

Ashana.Jackol
fuente
Y aclare cómo usar: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M
15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
Mike Samuel
fuente
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

Fei
fuente
4

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

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

RunningWheels
fuente
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);
MikeL
fuente
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));
Choudry Zaman
fuente
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

Gaston Cufre
fuente