TextView android: definir a cor de fundo dinamicamente não funciona


169

Definir a cor de fundo programaticamente de um androide TextViewnão parece funcionar. Estou perdendo alguma coisa!

TextView et = new TextView(activity);
et.setText("350");
et.setBackgroundColor(R.color.white);

Eu também tenho esse arquivo (colors.xml) na minha pasta res / values

<resources>
        <color name="white">#ffffffff</color>
        <color name="black">#ff000000</color>
</resources>

[EDIT]: Além disso, a configuração da cor do texto faz com que o TextView desapareça.

TextView c1 = new TextView(activity);
c1.setTextColor(R.color.solid_red);
c1.setText("My Text");

Respostas:


333

Usar et.setBackgroundResource(R.color.white);


5
A API do Android é realmente algo, por que não poderia gerar um erro?
Tawani 23/09/09

53
Porque não é um erro. setBackgroundColor () pega uma cor na forma numérica (por exemplo, 0xFFFF0000 para vermelho). R.color.white também é um número.
CommonsWare 23/09/09

6
D'oh! Definitivamente, isso poderia ter sido feito melhor com enumerações do que com onipresentes ints. Obrigado pela resposta.
Wojciech Górski

2
Eles podem estar usando assinaturas de tipos diferentes! Um chamado ColorId e outro chamado HexColor ou algo assim. Ambos são inteiros, mas eles não são o mesmo tipo

1
Muito estranho. Da documentação: O recurso deve se referir a um objeto Drawable ou 0 para remover o plano de fundo.
Artem

73

Tente o seguinte:

TextView c1 = new TextView(activity);
c1.setTextColor(getResources().getColor(R.color.solid_red));
c1.setText("My Text");

Concordo que uma cor e um recurso têm o mesmo tipo, mas também passo algumas horas para encontrar esta solução.


2
Eu não o entendo totalmente agora (olhando os documentos da API), mas funciona, então obrigado!
precisa saber é o seguinte

Obrigado, você me salvou algumas horas! Agora que conheço a solução, faz sentido para mim, mas tenho certeza de que levaria algumas horas para descobrir isso sozinho.
precisa

Obrigado. A API do Android às vezes não é realmente intuitiva.
suDocker

64

Para definir a cor vermelha:

textView.setBackgroundColor(0xfff00000);

Ou

<color name="solid_red">#fff00000</color>

textView.setBackgroundResource(R.color.solid_red);

1
Para ecoar a resposta do badMonkey, essa é a resposta mais popular, você DEVE definir os bits de ordem superior a zero para a transparência. Sou pego o tempo todo especificando o RGB sem o A. Para definir o plano de fundo como azul puro, use 0xff0000ff, não 0x0000ff ou não funcionará.
precisa saber é o seguinte

No .xml, o valor de um elemento <color> funciona apenas com os 6 dígitos clássicos: # FF0000
Arma X

@ WeaponX: funciona bem com cores transparentes (em 8 dígitos).
precisa saber é o seguinte

@Weapn X A função leva um número inteiro, 4 bytes. 6 dígitos hexadecimais são 3 bytes.

20

Eu tive um problema semelhante ao criar uma cor numérica sem considerar o canal alfa principal. ie mytext.setTextColor(0xFF0000)(pensando que isso seria vermelho). Embora essa cor seja vermelha, ela também é 100% transparente como it = 0x00FF0000; O valor 100% opaco correto é 0xFFFF0000ou mytext.setTextcolor(0xFFFF0000).


10

Apenas essa 1 linha de código alterou o plano de fundo programaticamente

tv.setBackgroundColor(Color.parseColor("#808080"));

8

Bem, eu tive uma situação em que o serviço web retornou uma cor no formato hexadecimal como "# CC2233" e queria colocar essa cor no textView usando setBackGroundColor (), então usei a classe Android Color para obter o valor int da sequência hexadecimal e a passei para função mencionada. Tudo funcionou. Este é um exemplo:

String myHexColor = "#CC2233";
TextView myView = (TextView) findViewById(R.id.myTextView);
myView.setBackGroundColor(Color.pasrsehexString(myHexColor));

O PS postou esta resposta porque outras soluções não funcionaram para mim. Espero que isso ajude alguém :)


5

aqui está em pequenos detalhes,

se você estiver em atividade, use este

textview.setBackground(ContextCompat.getColor(this,R.color.yourcolor));

se você estiver em fragmentos, use o código abaixo

textview.setBackground(ContextCompat.getColor(getActivity(),R.color.yourcolor));

se você estiver no adaptador de reciclagem, use o código abaixo

textview.setBackground(ContextCompat.getColor(context,R.color.yourcolor));

// use holder.textview if you are in onBindviewholder
//here context is passed from fragment

4

Aqui estão as etapas para fazer isso corretamente:

  1. Primeiro, declare uma instância do TextView em seu MainActivity.java da seguinte maneira:

    TextView mTextView;
  2. Defina algum texto DINAMICAMENTE (se desejar) da seguinte maneira:

    mTextView.setText("some_text");
  3. Agora, para definir a cor do plano de fundo, você precisa definir sua própria cor no arquivo res-> valores-> colors.xml da seguinte maneira:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Agora você pode usar a cor "my_color" no seu arquivo java para definir o plano de fundo dinamicamente da seguinte maneira:

    mTextView.setBackgroundResource(R.color.my_color);

4
tv.setTextColor(getResources().getColor(R.color.solid_red));

3

Color.parseHexColor("17ee27")não funcionou para mim, Color.parseColor("17ee27")funcionou perfeitamente.


2

duas maneiras de fazer isso:

1.crie a cor no arquivo colors.xml como:

<resources>
        <color name="white">#ffffff</color>
</resources>

e use-o int activity java class como:

et.setBackgroundResource(R.color.white);

2)

et.setBackgroundColor(getResources().getColor(R.color.white));
                or
et.setBackgroundColor(Color.parseColor("#ffffff"));

2

Se você deseja oferecer suporte a todas as versões: Tente o seguinte:

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 

1

Apenas uso

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);

-10

você pode usar android:textColor= "qualquer cor de texto que desejar "no arquivo xml onde sua exibição de texto é declarada.


Programaticamente ... não xml
aLL
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.