android TextView:动态设置背景颜色不起作用


169

以编程方式设置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");

Answers:


332

et.setBackgroundResource(R.color.white);


5
android API确实是什么,为什么它不能抛出错误?
塔瓦尼

53
因为这不是错误。setBackgroundColor()采用数字形式的颜色(例如,红色为0xFFFF0000)。R.color.white也是一个数字。
CommonsWare

6
天哪!绝对可以用枚举而不是无处不在的int更好地做到这一点。感谢你的回答。
WojciechGórski2012年

2
他们可能使用了不同的类型签名!一个称为ColorId,另一个称为HexColor或其他名称。两者都是整数,但它们不是相同的类型

1
很奇怪。从文档中:资源应引用Drawable对象或0以删除背景。
Artem 2015年

73

试试这个:

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

我同意一种颜色和一种资源具有相同的类型,但是我也花了几个小时才能找到这种解决方案。


2
我目前尚不完全了解(查看api doc的内容),但它确实有效,所以谢谢!
CodeJustin.com 2010年

谢谢,您为我节省了几个小时!现在我知道了解决方案,这对我来说很有意义,但是我敢肯定,我自己花了几个小时才能解决这个问题。
FreewheelNat 2010年

谢谢。有时,Android API确实不直观。
suDocker 2011年

64

设置红色:

textView.setBackgroundColor(0xfff00000);

要么

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

textView.setBackgroundResource(R.color.solid_red);

1
为了响应badMonkey的答案(因为这是更流行的答案),您必须将高位设置为非零以提高透明度。我一直都在通过指定不带A的RGB来陷入困境。要将背景设置为纯蓝色,请使用0xff0000ff,而不是0x0000ff,否则它将不起作用。
JohnnyLambada 2013年

在.xml中,<color>元素的值仅适用于经典的6位数字:#FF0000
武器X

@WeaponX:它可以与透明颜色(8位数字)配合使用。
CoolMind

@Weapn X该函数采用4个字节的整数。6个十六进制数字是3个字节。

20

我有一个类似的问题,我在不考虑领先的Alpha通道的情况下创建数字颜色。即。 mytext.setTextColor(0xFF0000)(认为​​这将是红色的)。虽然这是红色,但它也是100%透明的,因为it = 0x00FF0000; 正确的100%不透明值为0xFFFF0000mytext.setTextcolor(0xFFFF0000)


10

仅这1行代码以编程方式更改了背景

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));

PS发布了此答案,因为其他解决方案对我不起作用。我希望这会对某人有所帮助:)


5

这里没有什么细节

如果您正在活动中,请使用此

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

如果您在片段中使用下面的代码

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. 首先,在MainActivity.java中声明TextView的实例,如下所示:

    TextView mTextView;
  2. 动态设置一些文本(如果需要),如下所示:

    mTextView.setText("some_text");
  3. 现在,要设置背景色,您需要在res-> values-> colors.xml文件中定义自己的颜色,如下所示:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. 现在,您可以在Java文件中使用“ my_color”颜色来动态设置背景,如下所示:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")没有为我工作,而是Color.parseColor("17ee27")完美地工作。


2

有两种方法:

1.在colors.xml文件中创建颜色,如下所示:

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

并将其int activity java类用作:

et.setBackgroundResource(R.color.white);

2。

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



-10

您可以android:textColor= "在声明了文本视图的xml文件中使用您要提供的任何文本颜色”。


以编程方式...不是xml
ALL
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.