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