Почему мой текст не отображается со стилем при использовании SpannableStringBuilder?

У меня проблема с объектом SpannableString.

Ниже приведен краткий пример:

SpannableString spanstr = new SpannableString("Bold please!");
spanstr.setSpan(new StyleSpan(Typeface.BOLD), 0, spanstr.length(), 0);

SpannableStringBuilder sb = new SpannableStringBuilder();
sb.append(spanstr);
sb.append("\n"); // A newline
sb.append("The first line is bold. This one isn't.");

CharSequence cq = sb.subSequence(0, sb.length());
// ^There's no such method to return a SpannableString,
// so I try to return a CharSequence instead.

// And then, at last:
TextView contentView = (TextView) findViewById(R.id.some_id);
contentView.setText(cq);

То, что пытается сделать пример, показывает это:

Выделите жирным шрифтом!
Первая строка выделена жирным шрифтом. Это не так.

Но проблема в том, что первая строка текста не будет выделена жирным шрифтом.

Почему он не делает ожидаемого?


person MC Emperor    schedule 17.04.2013    source источник
comment
contentView.setText(sb);   -  person Raghunandan    schedule 17.04.2013
comment
У меня такая же проблема. Вы нашли какое-нибудь решение. Это не тяжелая работа. Но я еще не мог найти простого решения. Все вышеперечисленные ответы тоже не работают   -  person Arda    schedule 11.04.2020


Ответы (4)


Используйте построитель связующих строк для установки в качестве текста в текстовом представлении:

contentView.setText(sb);

или еще вы можете сделать так:

SpannableStringBuilder spanstr = new SpannableStringBuilder("Bold please!");
spanstr.setSpan(new StyleSpan(Typeface.BOLD), 0, spanstr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanstr.append("\n");
spanstr.append("The first line is bold. This one isn't.");
contentView.setText(spanstr);
person Eldhose M Babu    schedule 17.04.2013

использовать сам экземпляр SpannableStringBuilder.

contentView.setText(sb);

вывод с вашим кодом:

введите здесь описание изображения

person Pragnani    schedule 17.04.2013
comment
Большое тебе спасибо. Я позвонил toString() в spannableBuilder и не мог понять, почему я не вижу стилизованный текст. - person Renat Kaitmazov; 14.09.2016
comment
@RenatKaitmazov Вы не должны вызывать метод toString() в SpannableBuilder, если вы это сделаете, он будет рассматривать его как строку, а не стилизованный текст. - person Pragnani; 14.09.2016

Попробуйте ниже. Вам нужно установить связующую строку в текстовое представление. Поэтому установите связующую строку в свой текст, как показано ниже.

String s= "The first line is bold. This one isn't";
String title="Bold Please!";  
TextView tv = (TextView) findViewById(R.id.some_id);
tv.setText("");
SpannableString ss1=  new SpannableString(title);
ss1.setSpan(new StyleSpan(Typeface.BOLD), 0, ss1.length(), 0);
tv.append(ss1);
tv.append("\n");
tv.append(s);

Я попробовал вышеописанное, и вы можете увидеть полученный снимок ниже.

введите здесь описание изображения

person Raghunandan    schedule 17.04.2013
comment
Спасибо .. Это работает как шарм, как то, что я хочу реализовать - person KishuDroid; 24.02.2016

Если вы используете собственный шрифт на своем устройстве. Есть такая глупая ошибка, я думаю. Измените пользовательский шрифт на используемый по умолчанию на вашем устройстве и повторите попытку.

person Arda    schedule 11.04.2020