重新连接TextWatcher后,将光标移至MultiLine EditText中的下一行

时间:2019-06-28 16:21:50

标签: java android android-edittext

我正在尝试在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的值。

1 个答案:

答案 0 :(得分:0)

如果有人有类似问题或有兴趣-

我发现了问题所在,这与监听程序无关,而与HTML解析部分无关。 Html.fromHtml()的{​​{1}}字符有问题。即使用\n标签替换了所有\n,错误仍然存​​在。在转向使用SpannableStringBuilder更改关键字颜色的方法之后,一切都准备就绪。

<br>

我注意到的另一件事是,当我使用一个FGspan表示多个单词时,实际上仅将应用于该单词的最新单词上色。因此,要解决此问题,请为每个要突出显示的新单词创建FGspan的新实例。