TextView текст отформатирован на основе текстового значения - PullRequest
0 голосов
/ 23 августа 2011

У меня есть приложение, в котором мне нужно отобразить список чисел, но числа должны быть отформатированы в зависимости от их значения.Отрицательные числа показаны в обычном тексте, положительные числа показаны как полужирный .Кроме того, число должно всегда быть положительным в текстовом представлении.Я попытался расширить TextView с переопределением setText следующим образом:

@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.Это привело к тому, что каждое число будет выделено жирным шрифтом, поскольку в следующий раз оно будет положительным.

Я хотел бы сохранить эту логику в виджете, а не в том месте, где задан текст, так как это очень часто встречается.в моем приложении.

Есть ли способ сделать это в виджете?

Ответы [ 2 ]

0 голосов
/ 30 августа 2011

Хорошо, я просто создал адаптер для каждого списка, который использовал этот особый случай, и позаботился об этом в упражнении для любого другого его экземпляра. Примерно так:

@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 голосов
/ 23 августа 2011

Просто добавьте переменную-член в ваш класс, чтобы проверить, была ли она уже изменена или сохранить первоначальное значение.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...