TextView文本基于文本值格式化

时间:2011-08-23 18:43:55

标签: android textview

我有一个应用程序,我需要显示一个数字列表,但数字需要根据它们的值进行格式化。正数显示为正数,正数显示为粗体。此外,数字需要始终在文本视图中显示为正数。我尝试使用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,因此效果不佳。这导致每个数字都显得大胆,因为下次通过时它是正面的。

我想将此逻辑保留在窗口小部件中,而不是设置文本的位置,因为这在我的应用程序中非常常见。

我有可能在小部件中执行此操作吗?

2 个答案:

答案 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);
}