Cómo obtener un color de una cadena de color hexadecimal

Respuestas:

592

Prueba el Colormétodo de clase:

public static int parseColor (String colorString)

De la documentación de Android :

Los formatos admitidos son: #RRGGBB #AARRGGBB 'rojo', 'azul', 'verde', 'negro', 'blanco', 'gris', 'cian', 'magenta', 'amarillo', 'gris claro', 'gris oscuro '

jethro
fuente
44
Alguien sabe cómo analizar los #000valores?
Alex Semeniuk
66
Sí, solo hazlo: 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) }
corrígeme
66
Para agregar al código @ xdevs23, cambie la condición if a esto:if(colorString.length() == 4 && colorString[0] == '#')
Zac
Su respuesta sería mejor si no solo muestra la función, sino también cómo usarla: MyView.setBackgroundColor (Color.parseColor ("# 123456");
Yvonne Marggraf
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 (rojo, azul, verde);
GTID
253

Tratar:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
invisbo
fuente
44
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.

Estos colores de tema se usan en toda la aplicación y se ven así:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

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 .

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

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

Suragch
fuente
22

Convierta esa cadena a un intcolor que pueda usarse en setBackgroundColorysetTextColor

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

El 16 significa que es hexadecimal y no su 0-9 normal. El resultado debe ser el mismo que

int color = 0xFFFF0000;
Bryan Field
fuente
¿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"
error1337
16

Sus

int color =  Color.parseColor("colorstring");
Patricia Heimfarth
fuente
15

Prueba esto:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
MindBrain
fuente
12

Lo uso y funciona muy bien para mí para configurar el color que desee.

public static final int MY_COLOR = Color.rgb(255, 102, 153);

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.

Opy
fuente
7

En Xamarin usa esto

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
Shanmugasundharam
fuente
6

Archivo XML guardado en res / values ​​/ colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Este código de aplicación recupera el recurso de color:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

Este diseño XML aplica el color a un atributo:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>
ARIZONA_
fuente
5

Intente usar 0xFFF000 en su lugar y páselo al método Color.HSVToColor.

Dave Long
fuente
2
Esperaría que reemplazaras esa tercera F con un cero. En el OP, creo que los dos primeros caracteres F se usan para establecer la opacidad.
Bryan Field
4

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:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

En mi muestra lo usé para TestView

M.Hefny
fuente
0

Para código hexadecimal acortado

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