Como definir a cor do texto do TextView no código?

544

Em XML, podemos definir uma cor de texto pelo textColoratributo, como android:textColor="#FF0000". Mas como eu o altero codificando?

Eu tentei algo como:

holder.text.setTextColor(R.color.Red);

Onde holderé apenas uma classe e texté do tipo TextView. Vermelho é um valor RGB (# FF0000) definido em seqüências de caracteres.

Mas mostra uma cor diferente e não vermelha. Que tipo de parâmetro podemos passar em setTextColor ()? Na documentação, ele diz int, mas é um valor de referência de recurso ou qualquer outra coisa?

Vikas
fonte
Uma observação sobre como ajustar a interface do usuário no código, considere as vantagens de ver a interface do usuário no tempo de design, minimizando ao mínimo as alterações no tempo de execução.
AlikElzin-kilaka

Respostas:

1245

Você deveria usar:

holder.text.setTextColor(Color.RED);

Você pode usar várias funções da Colorclasse para obter o mesmo efeito, é claro.

  • Color.parseColor (Manual) (como o LEX usa)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbe Color.argb( rgb manual ) ( argb manual ) (como o Ganapathy usa)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • E, claro, se você deseja definir sua cor em um XMLarquivo, você pode fazer o seguinte:

    <color name="errorColor">#f00</color>

    porque a getColor()função está obsoleta 1 , você precisa usá-la da seguinte maneira:

    ContextCompat.getColor(context, R.color.your_color);
  • Você também pode inserir HEX simples, da seguinte maneira:

    myTextView.setTextColor(0xAARRGGBB);

    Onde você tem um canal alfa primeiro, depois o valor da cor.

Confira o manual completo, é claro, a classe pública Color estende Object .


1 Esse código costumava estar aqui também:

textView.setTextColor(getResources().getColor(R.color.errorColor));

Agora, esse método está obsoleto no Android M. Você pode usá-lo no contextCompat na biblioteca de suporte , como mostra o exemplo agora.

Nanne
fonte
2
Além disso, se o texto for um link, você precisará usar text.setLinkTextColor (...); no código ou no android: textColorLink = "..." em XML
WOUNDEDStevenJones
1
@ Nanne Seria bom se sua resposta também mencionasse que R.color.XXX é uma referência à cor. Significando que ele precisa ser desreferenciado (como no seu exemplo), para maior clareza.
Nyaray 14/08
Eu não tenho certeza do que você quer dizer? Por exemplo, desreferenciado e, portanto, usará mais recursos ou você quer dizer outra coisa?
Nanne15 de
Existe alguma maneira de saber se um determinado valor de cor permitirá que um texto desapareça?
precisa
6
getColor(int)está obsoleto.
RestInPeace 28/11
137

Se você ainda deseja especificar suas cores no seu arquivo XML:

<color name="errorColor">#f00</color>

Em seguida, referencie-o no seu código com um destes dois métodos:

textView.setTextColor(getResources().getColor(R.color.errorColor, getResources().newTheme()));    

ou

textView.setTextColor(getResources().getColor(R.color.errorColor, null));

O primeiro provavelmente é preferível se você estiver compilando com o Android M; no entanto, o tema que você transmite pode ser nulo; talvez seja mais fácil para você?

E se você estiver usando a biblioteca Compat, poderá fazer algo assim

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));
xbakesx
fonte
9
Para setTextColor, por que ele precisa usar getResources (). GetColor () em vez da referência direta R.color.errorColor? O R.color.x funciona para quase todos os outros métodos. Incrivelmente frustrante!
Civil
8
@ Civil: como o parâmetro int exigido pelos métodos setXXXColor () é considerado o valor ARGB real a ser usado, NÃO o valor a ser pesquisado no arquivo de recursos. Estranhamente, a classe View possui setBackgroundColor () e setBackgroundResource (), enquanto o TextView está ausente no método setTextResource ().
Ian Kemp
1
getColor(int)está obsoleto. ContextCompat.getColor(getContext(), R.color.yourColor);parece ser o substituto.
RestInPeace 28/11
45

E um outro:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));
LEX
fonte
1
getResources()é uma função de membro do contexto. Para adaptadores, use getContext().getResources(). Os valores das cores devem entrar em recursos, como na resposta do @ xbakesx.
C0D3LIC1OU5
40

Você pode fazer isso apenas de um arquivo XML também.

Crie um color.xmlarquivo na pasta valores:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="textbody">#ffcc33</color>

</resources>

Em qualquer arquivo XML, você pode definir a cor do texto usando,

android:textColor="@color/textbody"

Ou você pode usar esta cor em um arquivo Java:

final TextView tvchange12 = (TextView) findViewById(R.id.textView2);
//Set color for textbody from color.xml file
tvchange1.setTextColor(getResources().getColor(R.color.textbody));
novo dia
fonte
27

Você pode usar

holder.text.setTextColor(Color.rgb(200,0,0));

Você também pode especificar a cor que deseja com Transparência.

holder.text.setTextColor(Color.argb(0,200,0,0));

a para valor Alpha (transparente) r-vermelho g-verde b-azul

Ganapathy C
fonte
15

use o seguinte código em layout.xml

<TextView  android:id="@+id/textView1"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content" 
android:text="@string/add"
android:layout_marginTop="16dp"
android:textAppearance="?
android:attr/textAppearanceMedium"
android:textColor="#25383C"
android:textSize="13sp" />

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:layout_marginTop="16dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#25383C"
        android:textSize="13sp" />
Chinna
fonte
15

Existem muitas maneiras diferentes de definir cores na exibição de texto.

  1. Adicione o valor da cor em res-> valores-> colors.xml do estúdio como

    <color name="color_purple">#800080</color>

    Agora defina a cor na classe xml ou actvity como

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Se você deseja fornecer um código de cor, use diretamente o código abaixo Color.parse

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Você também pode usar RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. O uso também pode usar o código hexadecimal direto para o textView. Você também pode inserir HEX simples, da seguinte maneira:

    text.setTextColor(0xAARRGGBB);
  5. Você também pode usar argb com valores alfa.

       text.setTextColor(Color.argb(0,200,0,0));

    a para Alpha (transparente) v.

  6. E se você estiver usando a biblioteca Compat, poderá fazer algo assim

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));
Classificação
fonte
9

Eu normalmente faço isso para quaisquer visualizações:

myTextView.setTextColor(0xAARRGGBB);

Onde

  • AA define alfa (00 para transparente, FF para opaco)

  • RRGGBB define o código de cores HTML normal (como FF0000 para vermelho).

AW
fonte
E por que o voto negativo? Você pode adicionar algumas idéias sobre isso, por favor?
AW
7

Se você planeja usar o setTextAppearance , saiba que ele substituirá a cor do texto pelo estilo herdado do tema. Portanto, se você quiser usar os dois, defina a cor posteriormente .

Isso funciona:

textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
textView.setTextColor(Color.RED);

Embora isso faça com que a cor do seu texto seja, por exemplo, branca (para o tema escuro) ou preta (para o tema claro):

textView.setTextColor(Color.RED);
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);

Ao contrário disso, em XML, a ordem é arbitrária.

Robin Gawenda
fonte
7
textView.setTextColor(ContextCompat.getColor(getApplicationC‌​ontext(),R.color.col‌​orWhite)); 

No colors.xmlarquivo, escreva o código abaixo:

<color name="colorWhite">#FFFFFF</color>
Kaushik Chatterjee
fonte
6

Acredito que se você quiser especificar uma cor como um recurso (no arquivo XML ), precisará fornecer seu valor ARGB (não apenas o valor RGB).

Tente alterar o valor da cor para #FFFF0000. Deve dar-lhe vermelho.

Arnab Chakraborty
fonte
a minha experiência, isso não é verdade e é possível usar um valor RGB em vez de um valor ARGB
slinden77
6

text.setTextColor(getResource().getColor(R.color.black)) você criou a cor preta em color.xml.

OU

text.setTextColor(Color.parseColor("#000000")) aqui digite o código hexadecimal desejado

OU

text.setTextColor(Color.BLACK) você pode usar campos de cores estáticos

Nitish
fonte
5

Usar:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));
Talha
fonte
5
holder.text.setTextColor(Color.rgb(200,0,0));

ou

myTextView.setTextColor(0xAARRGGBB);
Yash Patil
fonte
4

Usando o Adapter, você pode definir a cor do texto usando este código:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));
Hiren Patel
fonte
4
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

O código acima está funcionando do meu lado. Aqui textestá um TextView no qual a cor é necessária para ser definida.

Evon Technology
fonte
2

A partir da API 23, getResources().getColor()foi preterido.

Use isto:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));
PJ2104
fonte
1
   textViewStatus.setTextColor(res.getColor(R.color.green));
zudo1337
fonte
1

No adaptador, você pode definir a cor do texto usando este código:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));
Peter Mortensen
fonte
1

Se você deseja fornecer o código de cores diretamente, use

textView.setTextColor(Color.parseColor("#ffffff"));

ou se você deseja fornecer o código de cores da pasta colors, use

textView.setTextColor(R.color.white);
reshma
fonte
esse código textView.setTextColor (R.color.white); não funciona Você poderia usar text.setTextColor (getResources () getColor (R.color.color_purple) para obter a cor do seu color.xml.
Gian Gomen
1

Para definir a cor de um TextView, TextView.setTextColor(R.color.YOURCOLOR)não basta!

Tem que ser usado assim -

TextView myText = (TextView) findViewById(R.id.YoutTextViewID);

myText.setTextColor(getResources().getColor(R.color.YOURCOLOR);

OU

myText.setTextColor(Color.parseColor("#54D66A"));
IntelliJ Amiya
fonte
1
holder.userType.setTextColor(context.getResources().getColor(
                    R.color.green));
Harish Gyanani
fonte
0

Da mesma forma, eu estava usando color.xml:

<color name="white">#ffffff</color>
    <color name="black">#000000</color>   

Para definir o TextViewplano de fundo como:

textView.setTextColor(R.color.white);

Eu estava recebendo uma cor diferente, mas quando usei o código abaixo, obtive a cor real.

textView.setTextColor(Color.parseColor("#ff6363"));
Raj Sharma
fonte
0

Eu fiz desta maneira: Crie um arquivo XML, chamado Colors na pasta res / values.

My Colors.xml:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="vermelho_debito">#cc0000</color>
    <color name="azul_credito">#4c4cff</color>
    <color name="preto_bloqueado">#000000</color>
    <color name="verde_claro_fundo_lista">#CFDBC5</color>
    <color name="branco">#ffffff</color>
    <color name="amarelo_corrige">#cccc00</color>
    <color name="verde_confirma">#66b266</color>
</resources>

Para obter essas cores do arquivo xml, usei este código: valor é um TextView e ctx é um objeto Context. Não o estou usando de uma Activity, mas de um BaseAdapter para um ListView. É por isso que eu usei esse objeto de contexto.

valor.setTextColor(ctx.getResources().getColor(R.color.azul_credito));

Espero que ajude.

Cristiano Guerra
fonte
0

Para fornecer valores rgb: text.setTextColor(Color.rgb(200,0,0));
Para analisar a cor a partir de um valor hexadecimal: text.setTextColor(Color.parseColor("#FFFFFF"));

Camarada
fonte
0

Se você estiver em um adaptador e ainda desejar usar uma cor definida nos recursos, tente a seguinte abordagem:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));
Aleks Nine
fonte
0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);
CONvid19
fonte
0

getColor () está obsoleto

Então tente desta maneira:

 tv_title.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.sf_white));
kgandroid
fonte
0

Eu estava fazendo isso para um TextView em um ViewHolder para um RecyclerView. Não sei por que, mas não funcionou para mim na inicialização do ViewHolder.

public ViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.text_view);
    textView.setTextColor(context.getResources().getColor(R.color.myColor));
    // Other stuff
}

Mas quando mudei para o onBindViewHolder, funcionou bem.

public void onBindViewHolder(ViewHolder holder, int position){
    // Other stuff
    holder.textView.setTextColor(context.getResources().getColor(R.color.myColor));
}

Espero que isso ajude alguém.

IsaiahJ
fonte