Android SpannableString(Builder) 不应用样式

Android SpannableString(Builder) does not apply style

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() 确实使它像这样加粗: 这就是我希望它出现的方式,因为超过 here 他们说它的性能更好,我想使用本机 android 功能。 使用 SpannableStringBuilder 它显示如下: 没有任何大胆的东西。我也试过只使用 SpannableString 而不是 SpannableStringBuilder,但这也没有改变任何东西。我做错了什么?

我的 money 变量是 TextView.

我自己找到了答案。我确定我之前尝试过,但它是这样工作的: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);

//这行代码很重要,因为我在spannable string

中添加了"paid | "
styledString.setSpan(new StyleSpan(Typeface.BOLD), 7, styledString.length, 0);

money.setText(styledString);