Можно ли применить несколько setSpan к одному и тому же SpannableStringBuilder? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть список конкретных слов из предложения, для которых я хотел бы выделить жирный текст и изменить цвет текста.По какой-то причине изменение цвета текста работает, но жирный шрифт не применяется.Что еще более странно, это то, что изменение шрифта на курсив отражает.Мой вопрос заключается в том, что может быть причиной того, что мой текст не будет выделен жирным шрифтом?

// lets create a list of words
ArrayList<String> alWords = new ArrayList<>();
alWords.add("Mary");
alWords.add("lamb");

// had earlier StringBuilder to form 'Mary had a little lamb.' for example
SpannableStringBuilder sentence = new SpannableStringBuilder(sb.toString());

// iterate through list of words and bold & color change text
for (int i = 0; i < alWords.size(); i++) {
   Pattern word = Pattern.compile(alWords.get(i));
   Matcher match = word.matcher(sentence);

   int startPos = 0;
   int endPos = 0;

   while (match.find()) {
      startPos = match.start();
      endPos = match.end();
   }
   sentence.setSpan(new StyleSpan(Typeface.BOLD), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
   sentence.setSpan(new ForegroundColorSpan(ContextCompat.getColor(this, R.color.green)), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} 

tvText.setText(sentence, TextView.BufferType.SPANNABLE);

В результате получаются правильные слова с изменением цвета, но не жирным шрифтом.Если вы обновите курсив до Italic, все это тоже работает.Только жирный текст не работает.Любые мысли почему?

Для дальнейшего изучения, вот мои журналы dumpSpans:

span= Mary: 1c181a6 android.text.style.StyleSpan (0-4) fl=#33 
span= Mary: 148f7e7 android.text.style.ForegroundColorSpan (0-4) fl=#33 
span= lamb: b441f94 android.text.style.StyleSpan (18-22) fl=#33 
span= lamb: e18ba3d android.text.style.ForegroundColorSpan (18-22) fl=#33

1 Ответ

0 голосов
/ 24 октября 2018

Вместо SpannableStringBuilder я использую SpannableString, и он отлично работает.Попробуйте этот код:

SpannableString sentence = new SpannableString(sb.toString());

, а затем

tvText.setText(sentence);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...