Можно ли применить несколько setSpan к одному и тому же SpannableStringBuilder?
У меня есть список конкретных слов из предложения, для которых я хотел бы выделить жирный текст и изменить цвет текста. По какой-то причине изменение цвета текста работает, но жирный шрифт не применяется. Что еще более странно, это то, что изменение шрифта на курсив отражает. У меня вопрос, что может быть причиной того, что мой текст не будет выделен жирным шрифтом?
// 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 ответ
Решение
Вместо SpannableStringBuilder
я использую SpannableString
и работает нормально.
Попробуйте этот код:
SpannableString sentence = new SpannableString(sb.toString());
а потом
tvText.setText(sentence);