如何在代码中设置TextView的文本颜色?


544

在XML中,我们可以通过textColor属性设置文本颜色,例如android:textColor="#FF0000"。但是,如何通过编码进行更改?

我尝试了类似的东西:

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

在哪里holder只是一个类,并且text是类型TextView。红色是在字符串中设置的RGB值(#FF0000)。

但是它显示出不同的颜色,而不是红色。我们可以在setTextColor()中传递什么样的参数?在文档中说int,但这是资源参考值还是其他值?


有关在代码中调整UI的说明,请考虑在设计时查看UI的优势,将运行时更改最小化。
AlikElzin-kilaka

Answers:


1244

您应该使用:

holder.text.setTextColor(Color.RED);

您可以使用Color该类中的各种功能来获得相同的效果。

  • Color.parseColor (手动)(例如LEX使用)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbColor.argb手动rgb)(手动argb)(如Ganapathy的用法)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • 当然,如果要在XML文件中定义颜色,可以执行以下操作:

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

    因为getColor()不推荐使用该函数1,所以您需要像这样使用它:

    ContextCompat.getColor(context, R.color.your_color);
  • 您还可以插入普通十六进制,如下所示:

    myTextView.setTextColor(0xAARRGGBB);

    首先有一个Alpha通道的地方,然后是颜色值。

当然要查看完整的手册,公共类Color扩展Object


1此代码也曾经在这里:

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

现在在Android M中不推荐使用此方法。但是,您可以从支持库contextCompat中使用它,如示例所示。


2
另外,如果文本是链接,则需要使用text.setLinkTextColor(...); 在代码中或android:textColorLink =“ ...”在XML中
WOUNDEDStevenJones 2012年

1
@Nanne如果您的回答还提到R.color.XXX是对颜色的引用,那将是很好的。这意味着为了清楚起见,需要取消引用它(如您的示例中所示)。
nyaray

我不确定你是什么意思?例如,取消引用将使用更多资源,或者您还有其他意思吗?
Nanne

有什么方法可以判断某个特定的颜色值是否会让文字消失?
Christopher Masser

6
getColor(int)不推荐使用。
RestInPeace 2015年

137

如果仍要在XML文件中指定颜色,请执行以下操作:

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

然后使用以下两种方法之一在您的代码中引用它:

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

要么

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

如果您要针对Android M进行编译,则第一个可能更可取,但是您传入的主题可以为null,因此这对您来说更容易吗?

如果您使用的是Compat库,则可以执行以下操作

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));

9
对于setTextColor,为什么必须采用getResources()。getColor()而不是直接使用R.color.errorColor引用?R.color.x适用于几乎所有其他方法。令人沮丧的是!
平民

8
@Civilian:因为setXXXColor()方法需要的int参数被用作要使用的实际ARGB值,而不是要在资源文件中查找的值。奇怪的是,View类同时具有setBackgroundColor()和setBackgroundResource(),而TextView缺少setTextResource()方法。
伊恩·肯普

1
getColor(int)不推荐使用。ContextCompat.getColor(getContext(), R.color.yourColor);似乎是替代品。
RestInPeace 2015年

45

还有一个:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));

1
getResources()是上下文成员函数。对于适配器,请使用getContext().getResources()。颜色值应该进入资源,就像@xbakesx的答案一样。
C0D3LIC1OU5 2015年

40

您也只能从XML文件执行此操作。

color.xml在values文件夹中创建一个文件:

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

</resources>

然后,在任何XML文件中,您都可以使用以下方式为文本设置颜色:

android:textColor="@color/textbody"

或者,您可以在Java文件中使用此颜色:

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

27

您可以使用

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

您还可以使用透明胶片指定所需的颜色。

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

a为Alpha(透明)值r-红色g-绿色b-蓝色


15

在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" />

15

有许多不同的方法可以在文本视图上设置颜色。

  1. 在studio res-> values-> colors.xml中将颜色值添加为

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

    现在将xml或actvity类中的颜色设置为

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. 如果要直接给出颜色代码,请使用下面的Color.parseColor代码

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. 您也可以使用RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. 使用还可以将直接十六进制代码用于textView。您还可以插入普通十六进制,如下所示:

    text.setTextColor(0xAARRGGBB);
  5. 您也可以将argb与alpha值一起使用。

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

    Alpha(透明)v。

  6. 如果您使用的是Compat库,则可以执行以下操作

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));

9

对于任何视图,我通常都会这样做:

myTextView.setTextColor(0xAARRGGBB);

哪里

  • AA定义Alpha(00表示透明,FF表示不透明)

  • RRGGBB定义了常规的HTML颜色代码(例如FF0000为红色)。


为何要投票?您可以对此发表一些想法吗?
AW

7

如果计划使用setTextAppearance,则应该知道它将使用从主题继承的样式覆盖文本颜色。因此,如果您想同时使用两者,请在之后设置颜色。

这有效:

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

虽然这会导致您的文本颜色例如是白色(用于深色主题)或黑色(用于浅色主题):

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

与此相反,XML中的顺序是任意的。


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

colors.xml文件中,输入以下代码:

<color name="colorWhite">#FFFFFF</color>

6

我相信,如果您想指定一种颜色作为资源(在XML文件中),则必须提供其ARGB值(而不仅仅是RGB值)。

尝试将颜色值更改为#FFFF0000。它应该给你红色。


根据我的经验,这是不正确的,并且可以使用RGB值而不是ARGB值
slinden77

6

text.setTextColor(getResource().getColor(R.color.black)) 您已经在color.xml中创建了黑色。

要么

text.setTextColor(Color.parseColor("#000000")) 在这里输入所需的十六进制代码

要么

text.setTextColor(Color.BLACK) 您可以使用静态颜色字段


5

采用:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));


4

使用适配器,您可以使用以下代码设置文本颜色:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));

4
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

上面的代码在我这边工作。这text是一个需要设置颜色的TextView



2

从API 23开始,getResources().getColor()已弃用。

使用此代替:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));

1
   textViewStatus.setTextColor(res.getColor(R.color.green));

1

在适配器中,可以使用以下代码设置文本颜色:

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

1

如果您想直接给出颜色代码,则使用

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

或者如果您想从colors文件夹中提供颜色代码,请使用

textView.setTextColor(R.color.white);

这段代码textView.setTextColor(R.color.white); 不起作用。您可以使用text.setTextColor(getResources()。getColor(R.color.color_purple)从color.xml中获取颜色
Gian Gomen

1

为了设置TextView的颜色,TextView.setTextColor(R.color.YOURCOLOR)还不够!

它必须像这样使用–

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

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

要么

myText.setTextColor(Color.parseColor("#54D66A"));


0

同样,我正在使用color.xml

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

设置TextView背景如下:

textView.setTextColor(R.color.white);

我得到了不同的颜色,但是当我使用下面的代码时,我得到了实际的颜色。

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

0

我这样做的方式是:在res / values文件夹中创建一个名为Colors的XML文件。

我的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>

为了从xml文件中获得这种颜色,我使用了以下代码:valor是TextView,而ctx是Context对象。我不是在Activity中使用它,而是在BaseAdapter到ListView中使用它。这就是为什么我使用了此上下文对象的原因。

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

希望能帮助到你。


0

提供rgb值:text.setTextColor(Color.rgb(200,0,0));
从十六进制值解析颜色: text.setTextColor(Color.parseColor("#FFFFFF"));


0

如果您在适配器中,但仍想使用资源中定义的颜色,则可以尝试以下方法:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));

0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);

0

不推荐使用getColor()

因此,尝试这种方式:

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

0

我正在为RecyclerView的ViewHolder中的TextView执行此操作。我不确定为什么,但是在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
}

但是,当我将其移动到onBindViewHolder时,它可以正常工作。

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

希望这对某人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.