Если у кого-то есть подобные проблемы или он заинтересован -
Я выяснил, что проблема не в слушателе, а в части разбора HTML.Html.fromHtml()
имеет проблемы с \n
символами.Даже после замены всех тегов \n
на теги <br>
ошибка не исчезла.После перехода к подходу, в котором я использовал SpannableStringBuilder для изменения цвета ключевых слов, все стало на свои места.
@Override
public void afterTextChanged(Editable s) {
SpannableStringBuilder ssb = new SpannableStringBuilder(s.toString());
for (int i = 0; i<keyWords.size(); i++){
String keyword = keyWords.get(i);
Pattern pattern = Pattern.compile("\\b"+keyword+"\\b");
Matcher matcher = pattern.matcher(ssb);
while(matcher.find()){
// Have to create a new instance of FgColor for this to work!!
// KeywordColors is a Hashmap mapping keywords to the color they should be highlighted with
ForegroundColorSpan fg = new ForegroundColorSpan(keywordColors.get(keyword).getForegroundColor());
ssb.setSpan(fg, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
codeEditText.removeTextChangedListener(this);
codeEditText.setText(ssb);
codeEditText.addTextChangedListener(this);
codeEditText.setSelection(codeEditText.getText().length());
}
Еще одна вещь, которую я заметил, когда я использовал один FGspan для нескольких слов, только последнее слово, к которому он был применен, на самом деле раскрашивалось.Чтобы решить эту проблему, создайте новые экземпляры FGspan для каждого нового слова, которое нужно выделить.