Cómo obtener un color de una cadena de color hexadecimal
305
Me gustaría usar un color de una cadena hexa tal como "#FFFF0000"para (por ejemplo) cambiar el color de fondo de un diseño.
Color.HSVToColorparece un ganador pero toma un float[]como parámetro.
si está usando xamarin ... el código es este Android.Graphics.Color.ParseColor ("# 636161") con "P" a Upper
Igor Monteiro
38
Esta pregunta surge para una serie de búsquedas relacionadas con el color hexadecimal, por lo que agregaré un resumen aquí.
Color de int
Los colores hexadecimales toman la forma RRGGBBo AARRGGBB(alfa, rojo, verde, azul). En mi experiencia, cuando se usa intdirectamente, debe usar el AARRGGBBformulario completo . Si solo tiene el RRGGBBformulario, solo tiene que ponerle el prefijo FFpara que el alfa (transparencia) sea completamente opaco. Así es como lo configuraría en el código. Usar 0xal principio significa que es hexadecimal y no base 10.
int myColor =0xFF3F51B5;
myView.setBackgroundColor(myColor);
Color de cadena
Como otros han notado, puedes usar Color.parseStringasí
int myColor =Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
Tenga en cuenta que la cadena debe comenzar con a #. Ambos RRGGBBy AARRGGBBformatos son compatibles.
Color de XML
En realidad, debería obtener sus colores de XML siempre que sea posible. Esta es la opción recomendada porque hace que sea mucho más fácil realizar cambios de color en su aplicación. Si establece muchos colores hexadecimales a lo largo de su código, entonces es un gran dolor tratar de cambiarlos más tarde.
El diseño de material de Android tiene paladares de color con los valores hexadecimales ya configurados.
Si necesita colores adicionales, una buena práctica a seguir es definir su color en dos pasos en xml. Primero nombra el color del valor hexadecimal y luego nombra un componente de tu aplicación que debería tener un color determinado. Esto facilita el ajuste de los colores más adelante. De nuevo, esto está en colors.xml .
Luego, cuando desee establecer el color en el código, haga lo siguiente:
int myColor =ContextCompat.getColor(context, R.color.my_view_background_color);
myView.setBackgroundColor(myColor);
Colores predefinidos de Android
La clase Color viene con una serie de constantes de color predefinidas. Puedes usarlo así.
int myColor =Color.BLUE;
myView.setBackgroundColor(myColor);
Otros colores son
Color.BLACK
Color.BLUE
Color.CYAN
Color.DKGRAY
Color.GRAY
Color.GREEN
Color.LTGRAY
Color.MAGENTA
Color.RED
Color.TRANSPARENT
Color.WHITE
Color.YELLOW
Notas
Una forma rápida de encontrar colores hexadecimales es abrir el cuadro de diálogo de selección de color en Gimp (o algún otro software de edición de fotos).
¿Cómo puedo convertir String color = "80000000"; int color =?
Ashish Sahu
Creo que la versión de cadena debería ser, #80000000en cuyo caso la versión int sería int color = 0x80000000;. Si eso no funciona, publique una nueva pregunta con más detalles para que más personas que yo lo noten. Tenga en cuenta que #80000000es un color negro translúcido.
Bryan Field
Sé que int sería int color = 0x80000000 pero mi problema es cómo convertirlo ... Pero ahora resolveré mi problema con int color = parseColor ("#" + "80000000"); ... gracias por responder.
Ashish Sahu
Recibí una excepción al usar su código: java.lang.NumberFormatException: Invalid int: "FFFF0000"
Establezca los colores usando 0-255 para cada rojo, verde y azul, luego, en cualquier lugar donde desee usar ese color, simplemente coloque MY_COLOR en lugar de Color.BLUE o Color.RED o cualquiera de los otros colores estáticos que ofrece la clase Color.
Simplemente haga una búsqueda en Google de la tabla de colores y puede encontrar una tabla con los códigos RGB correctos usando 0-255.
int red = colorString.charAt(1)=='0'?0:255;int blue = colorString.charAt(2)=='0'?0:255;int green = colorString.charAt(3)=='0'?0:255;Color.rgb(red, green,blue);
Respuestas:
Prueba el
Color
método de clase:De la documentación de Android :
fuente
#000
valores?if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) }
if(colorString.length() == 4 && colorString[0] == '#')
Tratar:
fuente
Esta pregunta surge para una serie de búsquedas relacionadas con el color hexadecimal, por lo que agregaré un resumen aquí.
Color de int
Los colores hexadecimales toman la forma
RRGGBB
oAARRGGBB
(alfa, rojo, verde, azul). En mi experiencia, cuando se usaint
directamente, debe usar elAARRGGBB
formulario completo . Si solo tiene elRRGGBB
formulario, solo tiene que ponerle el prefijoFF
para que el alfa (transparencia) sea completamente opaco. Así es como lo configuraría en el código. Usar0x
al principio significa que es hexadecimal y no base 10.Color de cadena
Como otros han notado, puedes usar
Color.parseString
asíTenga en cuenta que la cadena debe comenzar con a
#
. AmbosRRGGBB
yAARRGGBB
formatos son compatibles.Color de XML
En realidad, debería obtener sus colores de XML siempre que sea posible. Esta es la opción recomendada porque hace que sea mucho más fácil realizar cambios de color en su aplicación. Si establece muchos colores hexadecimales a lo largo de su código, entonces es un gran dolor tratar de cambiarlos más tarde.
El diseño de material de Android tiene paladares de color con los valores hexadecimales ya configurados.
Estos colores de tema se usan en toda la aplicación y se ven así:
colors.xml
Si necesita colores adicionales, una buena práctica a seguir es definir su color en dos pasos en xml. Primero nombra el color del valor hexadecimal y luego nombra un componente de tu aplicación que debería tener un color determinado. Esto facilita el ajuste de los colores más adelante. De nuevo, esto está en colors.xml .
Luego, cuando desee establecer el color en el código, haga lo siguiente:
Colores predefinidos de Android
La clase Color viene con una serie de constantes de color predefinidas. Puedes usarlo así.
Otros colores son
Color.BLACK
Color.BLUE
Color.CYAN
Color.DKGRAY
Color.GRAY
Color.GREEN
Color.LTGRAY
Color.MAGENTA
Color.RED
Color.TRANSPARENT
Color.WHITE
Color.YELLOW
Notas
fuente
Convierta esa cadena a un
int
color que pueda usarse ensetBackgroundColor
ysetTextColor
El 16 significa que es hexadecimal y no su 0-9 normal. El resultado debe ser el mismo que
fuente
#80000000
en cuyo caso la versión int seríaint color = 0x80000000;
. Si eso no funciona, publique una nueva pregunta con más detalles para que más personas que yo lo noten. Tenga en cuenta que#80000000
es un color negro translúcido.Sus
fuente
Prueba esto:
fuente
Lo uso y funciona muy bien para mí para configurar el color que desee.
Establezca los colores usando 0-255 para cada rojo, verde y azul, luego, en cualquier lugar donde desee usar ese color, simplemente coloque MY_COLOR en lugar de Color.BLUE o Color.RED o cualquiera de los otros colores estáticos que ofrece la clase Color.
Simplemente haga una búsqueda en Google de la tabla de colores y puede encontrar una tabla con los códigos RGB correctos usando 0-255.
fuente
En Xamarin usa esto
fuente
Archivo XML guardado en res / values / colors.xml:
Este código de aplicación recupera el recurso de color:
Este diseño XML aplica el color a un atributo:
fuente
Intente usar 0xFFF000 en su lugar y páselo al método Color.HSVToColor.
fuente
Si define un color en su XML y desea usarlo para cambiar el color de fondo o algo así, esta API es la que está buscando:
En mi muestra lo usé para TestView
fuente
Para código hexadecimal acortado
fuente