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);
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()
确实使它像这样加粗:
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);