我在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”字符之后(即,将World
和Test
隔开的空格之前)并输入一个字符时, Hello 会自动失去其粗体样式
那是为什么?那使我感到困惑。仅当将光标定位在World
中的“ d”之后并输入一个字符时才会发生。对于所有其他光标位置,它均按预期工作。
这是为什么以及如何解决?我希望你好保持粗体。
答案 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));