我正在尝试在Android App中实现编码IDE。我创建了一个多行EditText来编写代码。要更改关键字的颜色,我将替换TextWatcher的afterTextChanged()
方法中的文本。问题在于,在键入回车时,光标不会移动到下一行。如果我删除下面的代码,一切正常(键入并移至新行)。
@Override
public void afterTextChanged(Editable s) {
String replaceText = codeEditText.getText().toString();
// Some logic that changes contents of replaceText
codeEditText.removeTextChangedListener(this);
codeEditText.setText(Html.fromHtml(replaceText));
codeEditText.setSelection(codeEditText.length(), codeEditText.length());
codeEditText.addTextChangedListener(this);
}
我也尝试过使用s.replace(0, s.length(), Html.fromHtml(replaceText));
,但是它也不起作用。除了上面的两个(分离-重新连接,s.replace)之外,还有没有更好的方法可以从TextWatcher中更改EditText的值。
答案 0 :(得分:0)
如果有人有类似问题或有兴趣-
我发现了问题所在,这与监听程序无关,而与HTML解析部分无关。 Html.fromHtml()
的{{1}}字符有问题。即使用\n
标签替换了所有\n
,错误仍然存在。在转向使用SpannableStringBuilder更改关键字颜色的方法之后,一切都准备就绪。
<br>
我注意到的另一件事是,当我使用一个FGspan表示多个单词时,实际上仅将应用于该单词的最新单词上色。因此,要解决此问题,请为每个要突出显示的新单词创建FGspan的新实例。