Como obter uma cor a partir de hexadecimal Color String

305

Eu gostaria de usar uma cor de uma sequência hexa, como "#FFFF0000"(digamos) alterar a cor do plano de fundo de um Layout. Color.HSVToColorparece um vencedor, mas leva a float[]como parâmetro.

Estou perto da solução?

Johann
fonte

Respostas:

592

Experimente o Colormétodo de classe:

public static int parseColor (String colorString)

Da documentação do Android :

Os formatos suportados são: #RRGGBB #AARRGGBB 'vermelho', 'azul', 'verde', 'preto', 'branco', 'cinza', 'ciano', 'magenta', 'amarelo', 'cinza claro', 'cinza escuro "

jethro
fonte
4
Alguém sabe como analisar #000valores?
Alex Semeniuk
6
Sim, basta fazer: 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) }, por favor me corrijam se eu estiver errado
xdevs23
6
Para adicionar ao código @ xdevs23, altere a condição if para isso:if(colorString.length() == 4 && colorString[0] == '#')
Zac
Sua resposta seria melhor se você não apenas mostrar a função, mas também como usá-la: MyView.setBackgroundColor (Color.parseColor ("# 123456"));
Yvonne Marggraf
int red = colorString.charAt (1) == '0'? 0: 255; int azul = colorString.charAt (2) == '0'? 0: 255; int verde = colorString.charAt (3) == '0'? 0: 255; Color.rgb (vermelho, azul, verde);
GTID 23/01/19
253

Experimentar:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
invisbo
fonte
4
se você estiver usando o xamarin .. o código é Android.Graphics.Color.ParseColor ("# 636161") com "P" para Upper
Igor Monteiro
38

Essa pergunta surge para várias pesquisas relacionadas à cor hexadecimal, então adicionarei um resumo aqui.

Cor de int

As cores hexadecimais assumem a forma RRGGBBou AARRGGBB(alfa, vermelho, verde, azul). Na minha experiência, ao usar um intdiretamente, você precisa usar o AARRGGBBformulário completo . Se você tiver apenas o RRGGBBformulário, basta prefixá-lo FFpara tornar o alfa (transparência) totalmente opaco. Aqui está como você o definiria no código. Usar 0xno início significa que é hexadecimal e não a base 10.

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);

Cor da corda

Como outros observaram, você pode usar Color.parseStringassim

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);

Observe que a String deve começar com a #. Ambos RRGGBBe AARRGGBBformatos são suportados.

Cor do XML

Você deve realmente obter suas cores do XML sempre que possível. Essa é a opção recomendada, pois facilita muito a alteração de cores no seu aplicativo. Se você definir muitas cores hexadecimais em todo o código, será muito difícil tentar alterá-las mais tarde.

O design do material Android possui paletas de cores com os valores hexadecimais já configurados.

Essas cores do tema são usadas em todo o aplicativo e têm a seguinte aparência:

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>

Se você precisar de cores adicionais, uma boa prática a seguir é definir sua cor em duas etapas no xml. Primeiro, nomeie a cor do valor hexadecimal e, em seguida, nomeie um componente do seu aplicativo que deve obter uma determinada cor. Isso facilita o ajuste das cores posteriormente. Novamente, isso está em colors.xml .

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

Então, quando você quiser definir a cor no código, faça o seguinte:

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);

Cores predefinidas para Android

A classe Color vem com um número de constantes de cores predefinidas. Você pode usá-lo assim.

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);

Outras cores são

  • 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
fonte
22

Converta essa string em uma intcor que possa ser usada setBackgroundColoresetTextColor

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

O 16 significa que é hexadecimal e não o seu normal de 0 a 9. O resultado deve ser o mesmo que

int color = 0xFFFF0000;
Bryan Field
fonte
como posso converter String color = "80000000"; para int color =?
Ashish Sahu 24/05
Eu acho que a versão da string deve estar #80000000nesse caso, a versão int seria int color = 0x80000000;. Se isso não funcionar, poste uma nova pergunta com mais detalhes para que mais pessoas do que eu percebam. Lembre- #80000000se de uma cor preta translúcida.
Bryan Field
Eu sei que int seria int color = 0x80000000, mas meu problema é como convertê-lo ... Mas agora vou resolver meu problema com int color = parseColor ("#" + "80000000"); ... obrigado pela resposta.
Ashish Sahu
Eu recebi uma exceção usando o seu código: java.lang.NumberFormatException: Int inválido: "FFFF0000"
error1337
16

Está

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

Tente o seguinte:

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

Eu uso isso e funciona muito bem para mim para definir qualquer cor que eu quiser.

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

Defina as cores de 0 a 255 para cada vermelho, verde e azul e, em qualquer lugar que você quiser, basta colocar MY_COLOR em vez de Color.BLUE ou Color.RED ou qualquer outra cor estática oferecida pela classe Color.

Basta fazer uma pesquisa no Google por cartela de cores e você pode encontrar uma cartela com os códigos RGB corretos usando 0-255.

Opy
fonte
7

No Xamarin, use este

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

Arquivo XML salvo em 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 do aplicativo recupera o recurso de cores:

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

Este XML de layout aplica a cor a um atributo:

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

Tente usar 0xFFF000 e passe isso para o método Color.HSVToColor.

Dave Long
fonte
2
Eu esperaria que você substituísse o terceiro F por zero. No OP, acho que os dois primeiros caracteres F são usados ​​para definir a opacidade.
Bryan Campo
4

Se você define uma cor no seu XML e deseja usá-lo para alterar a cor do plano de fundo ou algo que esta API é a que você está procurando:

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

Na minha amostra, usei-o para o TestView

M.Hefny
fonte
0

Para código Hex abreviado

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
fonte