Spanned строка теряет жирный стиль при добавлении символов - PullRequest
0 голосов
/ 23 июня 2018

Я установил следующий текст и стиль в моем 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 Ответ

0 голосов
/ 23 июня 2018

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

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