Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文本查看基于文本值格式化的文本_Android_Textview - Fatal编程技术网

Android 文本查看基于文本值格式化的文本

Android 文本查看基于文本值格式化的文本,android,textview,Android,Textview,我有一个应用程序,其中我需要显示一个数字列表,但这些数字需要根据其值进行格式化。负数以普通文本显示,正数以粗体显示。此外,数字需要在文本视图中始终显示为正值。我尝试在覆盖setText的情况下扩展TextView,如下所示: @Override public void setText(CharSequence text, TextView.BufferType type) { double number = Double.parseDouble(text.toString());

我有一个应用程序,其中我需要显示一个数字列表,但这些数字需要根据其值进行格式化。负数以普通文本显示,正数以粗体显示。此外,数字需要在文本视图中始终显示为正值。我尝试在覆盖setText的情况下扩展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);
}
这不太管用,因为setText在同一个MyTextView上被多次调用。这导致每个数字都显示为粗体,因为下一次通过时为正数

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


有没有一种方法可以在小部件中执行此操作?

只需向类中添加一个成员变量,以检查它是否已被修改或保留原始值

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

好的,我最后只是为使用这个特殊情况的每个列表制作了一个适配器,并在活动中为它的任何其他实例处理它。大概是这样的:

@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);
}

您是否尝试过替代setTextCharSequence?为什么不创建一个新的setTextdouble。另外,如果我没记错的话,当我尝试获取格式化文本时,我更幸运的是使用fromHtml而不是setTypeFace。我可以滚动我自己的适配器来使用setTextdouble,但我认为在MyTextView中处理这一切会更容易。好的,我最终只是为每个使用此特殊情况的列表制作了一个适配器,并在活动中处理它的任何其他实例。