Converta o valor da cor hexadecimal (#ffffff) em um valor inteiro

88

Estou recebendo valores de cores hexadecimais de um servidor (neste formato, por #xxxxxxexemplo, #000000para preto)

Como faço para converter isso em um valor inteiro?

Tentei fazer Integer.valueOf("0x" + passedColor.substring(1, passedColor.length()))para obter um 0x000000resultado ainda mais hexastático , mas isso não é interpretado como um intaqui, alguma outra sugestão?

Recebo um erro: 08-03 21:06:24.673: ERROR/AndroidRuntime(20231): java.lang.NumberFormatException: unable to parse '0x00C8FBFE' as integer

Estou usando o Android SDK para sua setBackgroundColor(int color)função, que leva - como você deve ter adivinhado - um valor de cor inteiro.

Este é o OPOSTO desta questão: Como converter um inteiro colorido em uma string hexadecimal no Android?

CQM
fonte
Por algum motivo, não consigo postar ... Você está quase lá, mas precisa do valueOfmétodo de dois argumentos , onde especifica a entrada da string (sem o #, é claro) e a raiz, que especifica a base. Integer.valueOf(passedColor.substring(1, passedColor.length()), 16) Isso pode ser feito com qualquer base inteira! download.oracle.com/javase/6/docs/api/java/lang/… , int)
ty1824
Sim, também não consegui postar minha resposta. Mike Samuel praticamente disse o que eu ia dizer.
vender em
Possível duplicata de How to get a Color from hexadecimal Color String
user2340612

Respostas:

183

A verdadeira resposta é usar:

Color.parseColor(myPassedColor)no Android, myPassedColorsendo o hexvalor como #000ou #000000ou #00000000.

No entanto, essa função não oferece suporte a valores hexadecimais abreviados , como #000.

CQM
fonte
9
Infelizmente, em não analisa o valor como #000. Ver documentação
Alex Semeniuk
@CQM como analisar cores hexadecimais abreviadas, como #ccc. Existe alguma outra maneira?
Kavita_p
30

A resposta é muito simples, pessoal, no Android se você quiser converter hex color em int, basta usar a classe android Color , exemplo mostrado abaixo

isto é para cor cinza claro

Color.parseColor("#a8a8a8");

É isso e você obterá seu resultado.

Ashana.Jackol
fonte
E apenas deixe claro como usar: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M
15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 
Mike Samuel
fonte
2
obrigado pela sugestão, eu tentei isso agora sem sucesso, e acontece que uma função Android incluída era o único tipo de resultado de cor que funciona, embora ambos retornem int. Color.parseColor (myPassedColor)) Não achei que fosse um problema específico do Android, mas descobri que era
CQM
4
Não sei por que as pessoas votaram a favor disso; não funciona !! As cores aqui estão sendo armazenadas em 32 bits, portanto, imprimi-las faz com que sejam exibidas como longos. parseInt procura um `- 'explícito para denotar um negativo, e não respeita o bit de sinal para ints ou longs. Portanto, ele fornecerá o número errado.
Christian Chapman
1
@enthdegree, para citar o OP, "Estou recebendo valores hexadecimais de cores de um servidor (neste formato, #xxxxxx", portanto, as cores com as quais o OP lida são 24 bits e não 32 bits; não há canal alfa.
Mike Samuel
1
@AllDayAmazing, '#' não é um dígito hexadecimal, sinal ou separador decimal, portanto parseInt, falhará se for encontrado na entrada.
Mike Samuel
Erro meu, estou tão arraigado no que estou fazendo que li rapidamente e vi parseColor(). Você está muito correto.
AllDayAmazing de
7

Eu tenho o mesmo problema que encontrei na forma de alguma cor #AAAAAAe quero convertê-la em uma forma que o Android possa usar. Descobri que você pode usar apenas 0xFFAAAAAApara que o Android possa dizer automaticamente a cor. Observe que o primeiro FFé revelador de alphavalor. Espero que ajude

Fei
fonte
4

A verdadeira resposta é a mais simples e fácil ....

String white = "#ffffff";
int whiteInt = Color.parseColor(white);
Milad Faridnia
fonte
3

Eu estava enfrentando o mesmo problema. Assim consegui resolver. Como o CQM disse, usar Color.parseColor () é uma boa solução para esse problema.

Aqui está o código que usei:

this.Button_C.setTextColor(Color.parseColor(prefs.getString("color_prefs", String.valueOf(R.color.green))));

Nesse caso, meu objetivo era alterar a cor do texto do Botão (Button_C) quando eu alterasse a seleção de cor em minhas Preferências (color_prefs).

RunningWheels
fonte
1

Baseado no CQM de resposta e sobre ovokerie-ogbeta 's resposta a outra pergunta que eu vim acima com esta solução:

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
fonte
1

Obtenha o código de cores das preferências compartilhadas na string e, em seguida, converta para inteiro e adicione a cor do plano de fundo do layout:

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

Experimente isso, crie um drawable em seu recurso ...

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

então use ...

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

com cor ... "#FFFFFF"

se a cor for transparente, use ... setAlpha

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

Boa sorte

Gaston Cufre
fonte