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?


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

Respostas:



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.


E apenas deixe claro como usar: someText.setTextColor (Color.parseColor ("# f9e6ff"))
Brian M

15
Integer.parseInt(myString.replaceFirst("#", ""), 16) 

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


4

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

String white = "#ffffff";
int whiteInt = Color.parseColor(white);

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).


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

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.