Я борюсь с очень странным поведением в моем приложении для 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.