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

Posted

技术标签:

【中文标题】android TextView:动态设置背景颜色不起作用【英文标题】:android TextView: setting the background color dynamically doesn't work 【发布时间】:2010-11-30 19:23:47 【问题描述】:

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

【问题讨论】:

【参考方案1】:

使用et.setBackgroundResource(R.color.white);

【讨论】:

android API 真有东西,为什么不能报错? 因为它不是错误。 setBackgroundColor() 采用数字形式的颜色(例如,0xFFFF0000 表示红色)。 R.color.white 也是一个数字。 天啊!使用枚举而不是无处不在的整数,这绝对可以做得更好。感谢您的回答。 他们可能使用不同的类型签名!一个叫 ColorId,另一个叫 HexColor 什么的。两者都是整数,但它们不是相同的 type 很奇怪。来自文档:资源应引用 Drawable 对象或 0 以删除背景。【参考方案2】:

试试这个:

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

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

【讨论】:

我现在不完全理解它(查看 api 文档)但它确实有效,所以谢谢! 谢谢,您为我节省了几个小时!现在我知道了解决方案,这对我来说很有意义,但我敢肯定我自己要花几个小时才能解决这个问题。 谢谢。 Android API 有时真的很不直观。【参考方案3】:

设置红色:

textView.setBackgroundColor(0xfff00000);

或者

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

textView.setBackgroundResource(R.color.solid_red);

【讨论】:

要回应 badMonkey 的答案,因为这是更流行的答案,您必须将高位设置为非零以实现透明度。我总是通过指定不带 A 的 RGB 来捕获。要将背景设置为纯蓝色,请使用 0xff0000ff,而不是 0x0000ff,否则它将不起作用。 在 .xml 中, 元素的值仅适用于经典的 6 位数字:#FF0000 @WeaponX:它适用于透明颜色(8 位数字)。 @Weapn X 该函数采用一个整数,4 个字节。 6 个十六进制数字是 3 个字节。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

当网络服务返回一个像“#CC2233”这样的十六进制格式的颜色并且我想通过使用 setBackGroundColor() 将这个颜色放在 textView 上时,我遇到了这种情况,所以我使用了 android Color 类来获取十六进制字符串的 int 值和将它传递给提到的函数。一切正常。 这是一个例子:

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

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

【讨论】:

【参考方案7】:

这里有一些细节,

如果你在活动中使用这个

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

【讨论】:

【参考方案8】:

以下是正确操作的步骤:

    首先,在 MainActivity.java 中声明一个 TextView 的实例,如下所示:

    TextView mTextView;
    

    如下动态设置一些文本(如果需要):

    mTextView.setText("some_text");
    

    现在,要设置背景颜色,需要在 res->values->colors.xml 文件中定义自己的颜色,如下:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
    

    您现在可以在您的 java 文件中使用“my_color”颜色来动态设置背景,如下所示:

    mTextView.setBackgroundResource(R.color.my_color);
    

【讨论】:

【参考方案9】:
tv.setTextColor(getResources().getColor(R.color.solid_red));

【讨论】:

【参考方案10】:

Color.parseHexColor("17ee27") 对我不起作用,而 Color.parseColor("17ee27") 却完美运行。

【讨论】:

【参考方案11】:

两种方法:

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

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

并将其用作 int 活动 java 类:

et.setBackgroundResource(R.color.white);

2.

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

【讨论】:

【参考方案12】:

如果您想支持所有版本: 试试这个:

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 

【讨论】:

【参考方案13】:

随便用

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);

【讨论】:

【参考方案14】:

要从资源中设置颜色,请按照以下步骤操作:

textView.setBackgroundColor(getResources().getColor(R.color.ButtonColorRed));

这里的ButtonColorRed是颜色资源中的颜色名称

【讨论】:

【参考方案15】:

如果您尝试上述解决方案但仍然无法正常工作,请查看您的 TextView xml 并确保删除 android:background(因为它可能与您的 et.setBackGroundColor(R.color.yourcolor)

【讨论】:

【参考方案16】:

你可以在声明你的文本视图的 xml 文件中使用android:textColor= " 任何你想给出的文本颜色。

【讨论】:

以编程方式...不是 xml

以上是关于android TextView:动态设置背景颜色不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android ListView 内置TextView动态改变其背景颜色

在方向更改上保存 TextView 的设置 - Android?

设置textView的边框和背景颜色

TextView设置动态改变颜色

如何设置Android中控件的颜色透明度

Android Ui线程循环