跨字符串在添加字符时失去粗体样式

时间:2018-06-23 13:15:33

标签: android android-edittext textview spannablestring spanned

我在EditText中设置了以下文本和样式:

SpannableStringBuilder sb = new SpannableStringBuilder();

sb.append("Hello");
sb.setSpan(new StyleSpan(Typeface.BOLD), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sb.append("World Test");
et.setText(sb);

结果是:“ 你好世界测试”。这可以。现在,当我将光标置于“ d”字符之后(即,将WorldTest隔开的空格之前)并输入一个字符时, Hello 会自动失去其粗体样式

那是为什么?那使我感到困惑。仅当将光标定位在World中的“ d”之后并输入一个字符时才会发生。对于所有其他光标位置,它均按预期工作。

这是为什么以及如何解决?我希望你好保持粗体。

1 个答案:

答案 0 :(得分:0)

也许您应该尝试这个

SpannableStringBuilder sb = new SpannableStringBuilder();
int s = sb.length();
sb.append("Hello");
sb.setSpan(new ForegroundColorSpan(0xFFCC5500), s, 
sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), s, 
sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
sb.append("World Test");
et.setText(sb);

或在api 21之后尝试使用此方法

SpannableStringBuilder sb = new SpannableStringBuilder();
StyleSpan bold = new StyleSpan(android.graphics.Typeface.BOLD);
sb.append("Hello")
          .append("BOLD ", bold, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
          .append("World");

喜欢html样式的尝试下面的

String str = "<b>" + "hello" + "</b> " + "World Test"; 
et.setText(Html.fromHtml(str));