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 中,我有一个类似的问题,我在不考虑前导 Alpha 通道的情况下创建数字颜色。 IE。 mytext.setTextColor(0xFF0000)
(认为这会是红色的)。虽然这是一种红色,但它也是 100% 透明的 it = 0x00FF0000;
正确的 100% 不透明值是 0xFFFF0000
或 mytext.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动态改变其背景颜色