从XML设置时未正确设置颜色 - 在代码中工作

时间:2012-03-16 09:35:59

标签: android xml colors

我在Android应用中遇到了一种非常奇怪的行为。我有一个TextView,其中背景和文本的颜色根据某些条件动态设置。为简化起见,将针对错误检查某些条件,并以此方式为文本视图设置颜色(请注意,添加文本视图的框架布局将背景颜色设置为@android:color/black):

TextView tv = new TextView(this);
((FrameLayout)this.findViewById(R.id.text_frame)).add(tv);

String val = getValue();
tv.setText(val);

if(isError(val)) {
    tv.setBackGroundColor(R.color.bg_error);
    tv.setTextColor(R.color.txt_error);
}
else {
    tv.setBackGroundColor(R.color.bg_normal);
    tv.setTextColor(R.color.txt_normal);
}

颜色在XML中定义如下:

<color name="bg_normal">#ffffff</color>
<color name="bg_error">#ff0000</color>
<color name="txt_normal">#0000ff</color>
<color name="txt_error">#008080</color>

我没想到这个代码有什么奇怪之处,因为我多次使用类似的东西。但是在这种情况下,此代码不起作用。无论我尝试什么,文本颜色和文本视图背景都保持黑色。

现在,如果我将代码更改为以下代码,一切都会完美无缺。

if(isError(val)) {
    tv.setBackGroundColor(Color.rgb(255, 0, 0));
    tv.setTextColor(Color.rgb(0, 128, 128));
}
else {
    tv.setBackGroundColor(Color.rgb(255, 255, 255));
    tv.setTextColor(Color.rgb(0, 0, 255);
}

当然,我可以这样离开它(它有效 - 为什么要修复它?),我宁愿从XML中获取颜色,因为以后更容易维护和修改。

有没有人知道问题可能是什么以及如何解决?

P.S。我将首先提出我用XML创建文本视图并在其中设置颜色的建议,即这是一个简化的代码。有很多这样的文本视图动态创建,其数量取决于外部参数。在编码时,我不知道是否会有1个这样的文本视图或100个。

1 个答案:

答案 0 :(得分:3)

setBackgroundColor()采用int中编码的颜色。您提供了资源ID,这将产生错误/不同的结果.¹

而是从这样的资源中获取编码的颜色:

tv.setBackGroundColor(getResources().getColor(R.color.bg_normal));

¹鉴于这是一个奇怪的设计,你必须绊倒,其他资源设置者也采取一个int,几乎一致的res id。这有点特殊情况。 :)

相关问题