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

Результат таков: "Hello World Test". Это отлично. Теперь, когда я помещаю курсор после символа "d" (т.е. перед пробелом, который разделяет World а также Test) и введите символ, Hello автоматически теряет жирный стиль.

Это почему? Это смущает меня. Это происходит только при позиционировании курсора сразу после "d" в World и ввод персонажа. Для всех остальных позиций курсора это работает как положено.

Почему это и как это исправить? Я хочу, чтобы Привет остался в смелом.

1 ответ

Может быть, вы должны попробовать это

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));
Другие вопросы по тегам