0

我在我的中设置了以下文本和样式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);

结果是这样的:“ Hello World Test”。这可以。现在,当我将光标定位在“d”字符之后(即在分隔Worldand的空格之前Test)并输入一个字符时,Hello会自动失去其粗体样式。

这是为什么?这让我很困惑。仅当将光标直接定位在“d”之后World并输入字符时才会发生这种情况。对于所有其他光标位置,它按预期工作。

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

4

1 回答 1

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));
于 2018-06-23T13:33:16.210 回答