我有一个应用程序,我需要显示一个数字列表,但数字需要根据它们的值进行格式化。正数显示为正数,正数显示为粗体。此外,数字需要始终在文本视图中显示为正数。我尝试使用setText overriden扩展TextView:
@Override
public void setText(CharSequence text, TextView.BufferType type) {
double number = Double.parseDouble(text.toString());
if (number > 0) {
this.setTypeface(this.getTypeface(), BOLD);
} else {
this.setTypeface(this.getTypeface(), NORMAL);
number = Math.abs(number);
}
super.setText(number + "", type);
}
由于在同一个MyTextView上多次调用了setText,因此效果不佳。这导致每个数字都显得大胆,因为下次通过时它是正面的。
我想将此逻辑保留在窗口小部件中,而不是设置文本的位置,因为这在我的应用程序中非常常见。
我有可能在小部件中执行此操作吗?
答案 0 :(得分:0)
只需在您的类中添加一个成员变量,以检查它是否已被修改或保留原始值。
private double originalValue = 0;
@Override
public void setText(CharSequence text, TextView.BufferType type) {
if(originalValue==0) {
originalValue = Double.parseDouble(text.toString());
}
this.setTypeface(this.getTypeface(), originalValue>0 ? BOLD : NORMAL);
super.setText(Math.abs(originalValue), type);
}
答案 1 :(得分:0)
好的,我最后只是为每个使用这种特殊情况的列表创建了一个适配器,并在活动中为它的任何其他实例处理它。像这样:
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView text = (TextView) view.findViewById(R.id.special_text);
double amount = cursor.getDouble(cursor.getColumnIndex(DbAdapter.KEY_NUMBER));
if (amount > 0) {
amountText.setTypeface(null, Typeface.BOLD);
} else {
amountText.setTypeface(null, Typeface.NORMAL);
amount = Math.abs(amount);
}
text.setText(amount);
}