How to set the text color of TextView in code?
Asked Answered
S

40

616

In XML, we can set a text color by the textColor attribute, like android:textColor="#FF0000". But how do I change it by coding?

I tried something like:

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

Where holder is just a class and text is of type TextView. Red is an RGB value (#FF0000) set in strings.

But it shows a different color rather than red. What kind of parameter can we pass in setTextColor()? In documentation, it says int, but is it a resource reference value or anything else?

Selfacting answered 5/1, 2011 at 10:14 Comment(1)
A note about tweaking UI in code, please consider the advantages of seeing the UI in design time, minimizing the runtime changes to minimum.Onward
O
1375

You should use:

holder.text.setTextColor(Color.RED);

You can use various functions from the Color class to get the same effect of course.

  • Color.parseColor (Manual) (like LEX uses)

    text.setTextColor(Color.parseColor("#FFFFFF"));
    
  • Color.rgb and Color.argb (Manual rgb) (Manual argb) (like Ganapathy uses)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
    
  • And of course, if you want to define your color in an XML file, you can do this:

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

    because the getColor() function is deprecated1, you need to use it like so:

    ContextCompat.getColor(context, R.color.your_color);
    
  • You can also insert plain HEX, like so:

    myTextView.setTextColor(0xAARRGGBB);
    

    Where you have an alpha-channel first, then the color value.

Check out the complete manual of course, public class Color extends Object.


1This code used to be in here as well:

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

This method is now deprecated in Android M. You can however use it from the contextCompat in the support library, as the example now shows.

Octaviaoctavian answered 5/1, 2011 at 10:17 Comment(11)
In addition, if the text is a link you need to use text.setLinkTextColor(...); in code or android:textColorLink="..." in XMLAppel
@Octaviaoctavian It would be nice if your answer also mentioned that R.color.XXX is a reference to the color. Meaning that it needs to be dereferenced (as it is in your example), for clarity.Gyno
I'm not sure what you mean? As in, dereferenced and so will use more resources or do you mean something else?Octaviaoctavian
Is there any way of telling if a particular color value is going to let a text disappear?Myeshamyhre
getColor(int) is deprecated.Dragoon
@AlwinKesler I'm not really sure what you mean by posting that link. It was allready in the answer, in code and as a link. I did change it a bit because it seems that it wasn't clear enough, so maybe this is better?Octaviaoctavian
Sorry, I want's clear enough. On Android 6.0 (API 23) getResource().getColor() is deprecated. Consider using ContextCompat.getColor() insteadNevis
textView.setTextColor(ContextCompat.getColor(getApplicationContext(),R.color.colorWhite)); Add below line in colors.xml. <color name="colorWhite">#FFFFFF</color>Doubleganger
how did to import color class?Varga
More codes about color codes in Android studio encycolorpedia.com/a4c639Nolen
Fun Fact: You can't set an Emoji's color, even though it's a member of your font. Call all the other glyphs "inked," and changing the color changes their ink. But all Emojis come with their own specified colors (which hopefully work on both light and dark backgrounds), so setTextColor() just bounces off them.Shamblin
S
149

If you still want to specify your colors in your XML file:

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

Then reference it in your code with one of these two methods:

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

or

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

The first is probably preferable if you're compiling against Android M, however the theme you pass in can be null, so maybe that's easier for you?

And if you're using the Compat library you can do something like this

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));
Sibella answered 1/4, 2011 at 19:53 Comment(3)
For setTextColor, why does it have to take the getResources().getColor() rather than the direct R.color.errorColor reference? The R.color.x works for almost every other method. Incredibly frustrating!Pleuro
@Civilian: because the int param that the setXXXColor() methods require is taken as the actual ARGB value to use, NOT the value to lookup in the resources file. Strangely enough, the View class has both setBackgroundColor() and setBackgroundResource(), while TextView is missing a setTextResource() method.Noctiluca
getColor(int) is deprecated. ContextCompat.getColor(getContext(), R.color.yourColor); seems to be the replacement.Dragoon
A
55

And another one:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));
Arletha answered 16/9, 2011 at 10:12 Comment(1)
getResources() is a Context member function. For adapters, use getContext().getResources(). Color values should go into resources, like in @xbakesx's answer.Ahem
A
44

You can do this only from an XML file too.

Create a color.xml file in the values folder:

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

</resources>

Then in any XML file, you can set color for text using,

android:textColor="@color/textbody"

Or you can use this color in a Java file:

final TextView tvchange12 = (TextView) findViewById(R.id.textView2);
//Set color for textbody from color.xml file
tvchange1.setTextColor(getResources().getColor(R.color.textbody));
Apomorphine answered 19/10, 2012 at 4:41 Comment(0)
S
29

You can use

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

You can also specify what color you want with Transparency.

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

a for Alpha (Transparent) value r-red g-green b-blue

Seltzer answered 5/1, 2011 at 10:44 Comment(0)
F
19

use the following code in 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" />
Fusco answered 9/1, 2015 at 13:13 Comment(0)
P
16

There are many different ways to set color on text view.

  1. Add color value in studio res->values->colors.xml as

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

    Now set the color in xml or actvity class as

    text.setTextColor(getResources().getColor(R.color.color_purple)
    
  2. If you want to give color code directly use below Color.parseColor code

    textView.setTextColor(Color.parseColor("#ffffff"));   
    
  3. You can also use RGB

    text.setTextColor(Color.rgb(200,0,0));
    
  4. Use can also use direct hexcode for textView. You can also insert plain HEX, like so:

    text.setTextColor(0xAARRGGBB);
    
  5. You can also use argb with alpha values.

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

    a for Alpha (Transparent) v.

  6. And if you're using the Compat library you can do something like this

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));
    
Platte answered 12/5, 2016 at 9:34 Comment(0)
D
10
textView.setTextColor(ContextCompat.getColor(getApplicationC‌​ontext(),R.color.col‌​orWhite)); 

In the colors.xml file, write in the code below:

<color name="colorWhite">#FFFFFF</color>
Doubleganger answered 4/1, 2018 at 14:8 Comment(0)
B
9

I normally do this for any views:

myTextView.setTextColor(0xAARRGGBB);

where

  • AA defines alpha (00 for transparent, FF for opaque)

  • RRGGBB defines the normal HTML color code (like FF0000 for red).

Bette answered 21/12, 2012 at 3:9 Comment(1)
And why the down-vote? Can you add some thoughts on this please?Bette
P
7

If you plan to use setTextAppearance you should know that it will overwrite the text color with the style inherited from the theme. So if you want to use both, set the color afterwards.

This works:

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

While this will cause your textcolor to be for instance white(for dark theme) or black(for the light theme):

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

Contrary to this in XML the order is arbitrary.

Previous answered 10/9, 2012 at 10:9 Comment(0)
D
7

text.setTextColor(getResource().getColor(R.color.black)) you have create black color in color.xml.

OR

text.setTextColor(Color.parseColor("#000000")) here type desired hexcode

OR

text.setTextColor(Color.BLACK) you can use static color fields

Daphie answered 30/8, 2018 at 8:22 Comment(0)
E
6

I believe that if you want to specify a color as a resource (in the XML file), you'll have to provide its ARGB value (not simply the RGB value).

Try changing your color value to #FFFF0000. It should give you RED.

Erv answered 27/6, 2011 at 5:15 Comment(1)
to my experience, that's not true and it is possible to use a RGB value instead of a ARGB valueSerena
A
5

Use:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));
Aiguille answered 7/5, 2012 at 19:15 Comment(0)
M
5
holder.text.setTextColor(Color.rgb(200,0,0));

or

myTextView.setTextColor(0xAARRGGBB);
Milepost answered 10/6, 2013 at 5:43 Comment(0)
D
5

Kotlin Extension Solution

Add these to make changing text color simpler

For setting ColorInt

myView.textColor = Color.BLACK // or Color.parseColor("#000000"), etc.

var TextView.textColor: Int
get() = currentTextColor
set(@ColorInt color) {
    setTextColor(color)
}

For setting ColorRes

myView.setTextColorRes(R.color.my_color)

fun TextView.setTextColorRes(@ColorRes colorRes: Int) {
    val color = ContextCompat.getColor(context, colorRes)
    setTextColor(color)
}
Dichlorodifluoromethane answered 27/3, 2020 at 21:38 Comment(0)
G
4

if you use Kotlin, there are 4 ways: (with Holder)

  1. Use Android resource:

    holder.textView.setTextColor(Color.GREEN)

  2. Use RGB:

    holder.textView.setTextColor(Color.rgb(255, 87, 34))

3)Use Hex:

holder.textView.setTextColor(Color.parseColor("#C2185B"))

4)Use Project resource: (requires API level 23)

holder.textView.setTextColor(context.resources.getColor(R.color.colorMax,null))
Gregggreggory answered 5/11, 2021 at 15:48 Comment(0)
B
3

Using Adapter you can set the text color by using this code:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));
Borlow answered 16/4, 2013 at 9:39 Comment(0)
R
3
text1.setTextColor(Color.parseColor("#000000"));
Ritter answered 31/5, 2016 at 11:19 Comment(1)
ask questions wisely :)Elect
S
3
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

Above code is working on my side. Here text is a TextView on which color is needed to be set.

Secure answered 24/5, 2017 at 13:26 Comment(0)
J
2

From API 23 onward, getResources().getColor() is deprecated.

Use this instead:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));
Johannajohannah answered 11/12, 2017 at 8:48 Comment(0)
R
1

In Adapter you can set the text color by using this code:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));
Retrenchment answered 16/4, 2013 at 9:37 Comment(0)
M
1
   textViewStatus.setTextColor(res.getColor(R.color.green));
Monticule answered 29/4, 2013 at 10:45 Comment(0)
H
1

if you want to give color code directly then use

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

or if you want to give color code from colors folder then use

textView.setTextColor(R.color.white);
Holotype answered 8/5, 2014 at 7:5 Comment(1)
this code textView.setTextColor(R.color.white); doesn't work. You could use text.setTextColor(getResources().getColor(R.color.color_purple) for getting the color from your color.xmlVander
U
1

I did this way: Create a XML file, called Colors in res/values folder.

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>

To get this colors from the xml file, I've used this code: valor it's a TextView, and ctx it's a Context object. I'm not using it from an Activity, but a BaseAdapter to a ListView. That's why I've used this Context Object.

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

Hope it helps.

Ultrasonic answered 17/10, 2014 at 12:19 Comment(0)
S
1

In order to set color of a TextView, TextView.setTextColor(R.color.YOURCOLOR) is not enough!

It has to be used like this –

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

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

OR

myText.setTextColor(Color.parseColor("#54D66A"));
Strafford answered 19/4, 2015 at 9:10 Comment(0)
O
1
holder.userType.setTextColor(context.getResources().getColor(
                    R.color.green));
Obstruent answered 21/10, 2015 at 10:51 Comment(0)
S
1

Try this:

textView.setTextColor(getResources().getColor(R.color.errorColor, null));
Shona answered 16/2, 2019 at 5:16 Comment(1)
it was mentioned above, but it bears repeating here: getColor is deprecated as of android M. It may disappear some day.Bromleigh
S
1

Try this:

TextView textview = (TextView) findViewById(R.id.textview );
textview .setTextColor(Color.parseColor("#85F85F"));
Shona answered 16/2, 2019 at 10:42 Comment(0)
R
1

I know there are many questions and it's late to answer this now but just to help someone who is stuck like me:

If you get an error Cannot resolve symbol Color

You have to import android.graphics.Color and then txt.setTextColor(Color.parseColor("#FFFFFF"))

Raji answered 29/4, 2023 at 17:24 Comment(0)
D
0

Similarly, I was using color.xml:

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

For setting the TextView background like:

textView.setTextColor(R.color.white);

I was getting a different color, but when I used the below code I got the actual color.

textView.setTextColor(Color.parseColor("#ff6363"));
Dioecious answered 10/3, 2014 at 7:10 Comment(0)
T
0

For providing rgb values: text.setTextColor(Color.rgb(200,0,0));
For parsing the color from a hex value: text.setTextColor(Color.parseColor("#FFFFFF"));

Transmarine answered 8/5, 2014 at 7:12 Comment(0)
D
0

You can use textView.setTextColor(Color.BLACK) to use any of the in-built colors of the Color class.

You can also use textView.setTextColor(Color.parseColor(hexRGBvalue)) to define custom colors.

Dessertspoon answered 10/7, 2014 at 11:28 Comment(0)
W
0

If you are in an adapter and still want to use a color defined in resources you can try the following approach:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));
Wiser answered 18/8, 2015 at 13:55 Comment(0)
G
0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);
Gman answered 23/9, 2015 at 22:55 Comment(0)
W
0

getColor() is depreceted

So try this way:

 tv_title.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.sf_white));
Weeper answered 2/9, 2016 at 10:43 Comment(0)
J
0

I was doing this for a TextView in a ViewHolder for a RecyclerView. I'm not so sure why, but it didn't work for me in the ViewHolder initialization.

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

But when I moved it to the onBindViewHolder, it worked fine.

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

Hope this helps someone.

Jackstay answered 2/11, 2016 at 9:27 Comment(0)
K
0
TextView color= (TextView)findViewById(R.id.color);
text.setTextColor(Color.RED);
Kalmuck answered 14/3, 2021 at 12:58 Comment(0)
P
0
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 
    b.numberDay1.setTextColor(ContextCompat.getColor(requireContext(), R.color.secondary_100))
} else {                
    b.numberDay1.setTextColor(resources.getColor(R.color.secondary_100))
}
Picker answered 5/7, 2021 at 14:34 Comment(0)
K
0

This worked for me inside of recycler View adapter (Compile API = 33):

@Override
public void onBindViewHolder(@NonNull MyAdapter.ViewHolder holder, int position) {
        super.onBindViewHolder(holder, position);
.
.
.

holder.view.myTextView.setTextColor(holder.itemView.getResources().getColor(R.color.green));
.
.
.
}
Kearse answered 27/2, 2023 at 10:37 Comment(0)
G
-1

Try using the following code :

holder.text.setTextColor(Color.parseColor("F00"));
Grams answered 7/4, 2015 at 8:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.