安卓TextView:动态设置背景颜色无效

181

在 Android 中编程设置 TextView 的背景颜色似乎不起作用。我是否漏掉了什么?

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

我也在我的 res/values 文件夹中有这个文件 (colors.xml)

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

[编辑]:同时,设置文本颜色会导致 TextView 消失。

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

363

使用et.setBackgroundResource(R.color.white);方法。


6
安卓API真的很棒,为什么它不能抛出一个错误呢? - Tawani
54
这并不是错误。setBackgroundColor()需要以数字形式提供颜色(例如,红色为0xFFFF0000)。R.color.white也是一个数字。 - CommonsWare
6
哎呀!使用枚举而不是普遍存在的整数肯定会更好。谢谢你的答案。 - Wojciech Górski
2
他们可能正在使用不同的类型签名!一个叫做ColorId,另一个叫做HexColor或其他什么。两者都是整数,但它们不是相同的类型 - user9903
1
非常奇怪。根据文档: 资源应该是一个Drawable对象,或者为0以移除背景。 - Artem

77

尝试这个:

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

我认为颜色和资源拥有相同的类型,但我也花了几个小时才找到这个解决方案。


2
我现在还没有完全理解它(查看API文档),但它确实有效,所以谢谢! - CodeJustin.com
谢谢,你帮我省了几个小时!现在我知道了解决方案,这对我来说很有意义,但我肯定自己要花费几个小时才能弄清楚。 - FreewheelNat
谢谢。Android API有时确实不直观。 - suDocker

66

设置红色颜色:

textView.setBackgroundColor(0xfff00000);

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

textView.setBackgroundResource(R.color.solid_red);

2
鉴于badMonkey的答案更受欢迎,为了实现透明度,您必须将高位设置为非零值。我经常因为没有指定A而被卡住。如果要将背景设置为纯蓝色,请使用0xff0000ff,而不是0x0000ff,否则它不起作用。 - JohnnyLambada
在 .xml 中,<color> 元素的值仅使用经典的 6 位数字:#FF0000。 - Ed_
@WeaponX:使用透明颜色(8位)可以很好地工作。 - CoolMind
@Weapn X 这个函数接受一个整数,4个字节。6个十六进制数字是3个字节。 - user9599745

20

我曾经遇到类似的问题,创建数字颜色时没有考虑前导alpha通道。例如,mytext.setTextColor(0xFF0000)(认为这将是红色)。虽然这是一种红色,但它也是100%透明的,因为it = 0x00FF0000;。正确的100%不透明值是0xFFFF0000mytext.setTextcolor(0xFFFF0000)


13

仅这一行代码就可以通过编程方式更改背景

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

8

我曾遇到一个情况,当web服务以十六进制格式返回颜色值时(如“#CC2233”),我想通过使用setBackGroundColor()方法将该颜色应用在textView上。因此,我使用了android Color类来获取十六进制字符串的int值,并将其传递给上述函数。一切正常。

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

顺便回答一下,我发表了这个答案是因为其他解决方案对我没有用。希望这能帮到别人:)


6

以下是一些详细信息:

如果您正在进行活动,请使用以下内容:

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

如果你在Fragment中使用,请使用以下代码:

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

如果你在RecyclerView适配器中使用,可以使用以下代码:
textview.setBackground(ContextCompat.getColor(context,R.color.yourcolor));

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

4

以下是正确操作的步骤:

  1. First of all, declare an instance of TextView in your MainActivity.java as follows:

    TextView mTextView;
    
  2. Set some text DYNAMICALLY(if you want) as follows:

    mTextView.setText("some_text");
    
  3. Now, to set the background color, you need to define your own color in the res->values->colors.xml file as follows:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
    
  4. You can now use "my_color" color in your java file to set the background dynamically as follows:

    mTextView.setBackgroundResource(R.color.my_color);
    

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

3

有两种方法可以实现该操作:

1.在colors.xml文件中创建颜色,例如:

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

并在Activity的Java类中使用它:

et.setBackgroundResource(R.color.white);

2.

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接