【问题标题】:Android SpannableString(Builder) does not apply styleAndroid SpannableString(Builder) 不应用样式
【发布时间】:2016-12-26 12:45:23
【问题描述】:
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。

【问题讨论】:

    标签: java android spannablestring textstyle


    【解决方案1】:

    问题在于您在货币文本视图的最后设置了一个字符串。它应该是一个跨接字符串。

    检查这个:

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

    【讨论】:

      【解决方案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 连接,它将 str 从 SpannableStringBuilder 转换为普通的无格式字符串。使用TextUtils.concat() 将多个CharSequence 对象连接在一起,这与String 和Spannable 对象一起使用,维护您的跨度。
      • 或SpannableStringBuilder#insert()方法
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 2016-02-05
      • 2011-07-25
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      相关资源
      最近更新 更多