Android SpannableString(Builder) не применяет стиль

SpannableStringBuilder str = new SpannableStringBuilder(decimalFormat.format(prizes[0])
    + "€");
str.setSpan(new StyleSpan(BOLD), 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

money.setText("paid | " + str);

Этот код должен давать тот же результат, что и этот код

money.setText(Html.fromHtml("paid | <strong>" + decimalFormat.format(prizes[0]) 
    + "€</strong>")

Но это не так! Мой текст не выходит жирным шрифтом. fromHtml() каждый делает это смелым как это: Вот как я хочу, чтобы это появилось, потому что здесь они сказали, что это лучше по производительности, и я хочу использовать нативные функции Android. С помощью SpannableStringBuilder это выглядит так: Ни с чем жирным. Я также пытался просто с помощью SpannableString вместо SpannableStringBuilder, но это тоже ничего не изменило. Что я делаю неправильно?

мой money переменная является TextView,

2 ответа

Решение

Я нашел ответ сам. Я был уверен, что я пробовал это раньше, но это работает так: textView.setText(spannableStringBuilder) вместо textView.setText(someString + spannableStringBuilder),

Итак, мой код теперь выглядит так:

SpannableStringBuilder str = new SpannableStringBuilder("paid | "
    +  decimalFormat.format(prizes[0]) + "€");
str.setSpan(new StyleSpan(BOLD), 7, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

money.setText(str);

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

Проверьте с этим:

String sMoney = decimalFormat.format(prizes[0]) + "€";

SpannableString styledString = new SpannableString("paid | " + sMoney);

// Эта строка кода важна, потому что я добавил "paid | " в spannable строку

styledString.setSpan(new StyleSpan(Typeface.BOLD), 7, styledString.length, 0);

money.setText(styledString);
Другие вопросы по тегам