2011-08-23 16 views
0

数字のリストを表示する必要があるアプリケーションがありますが、その数値に基づいて数値をフォーマットする必要があります。負の数は通常のテキストで表示され、正の数はの太字ので示されます。また、数値はテキストビューで常に正の値を示す必要があります。私は、次のようなオーバーライドのsetTextでのTextViewを拡張しようとした:テキスト値に基づいてフォーマットされた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上で複数回呼び出されていたとして、かなりの仕事を、しませんでした。その結果、次回に陽性となったすべての数字が太字で表示されました。

私のアプリケーションでは非常に一般的なオカレンスなので、テキストが設定されている場所ではなく、このロジックをウィジェットに入れておきたいと思います。

ウィジェットでこれを行う方法はありますか?

+0

あなたは、なぜ新しいのsetText(ダブル)を作らないのsetText(CharSequence引数)をオーバーライドhttp://plugins.jquery.com/plugin-tags/number-format – mozillanerd

+0

の代わりを試してみました。また、私が正しくフォーマットされたテキストを取得しようとしたときに、setTypeFace()ではなくfromHtml()でもっと良い運を得ました。 – FoamyGuy

+0

私はそれについて考えましたが、いくつかのアダプターでMyTextViewを使用します。 setText(double)を使用するために私自身のアダプタをロールアップすることができましたが、MyTextViewですべてを処理する方が簡単だと思います。 – Chewie

答えて

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); 
} 
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); 
} 
関連する問題