我已经知道有很多问题要求同样的事情,但它们对我不起作用。这是代码(我使用代码为EditText中的文本部分着色) -
et_note.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (textCC.contains("sample_text")) {
String syntaxText = "sample_text";
int ofe = textCC.indexOf(syntaxText, 0);
int nextOfe = textCC.indexOf(syntaxText, ofe);
for (int ofs = 0; ofs < textCC.length() && ofe != -1 && nextOfe != -1; ofs = nextOfe + 1) {
ofe = textCC.indexOf(syntaxText, ofs);
nextOfe = textCC.indexOf(syntaxText, ofe + 1);
if (ofe == -1 || nextOfe == -1) {
break;
} else {
Spannable WordtoSpan = new SpannableString(et_note.getText());
WordtoSpan.setSpan(new ForegroundColorSpan(0xFF00FF00), ofe, nextOfe + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
et_note.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
}
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
它会产生Stack Overflow错误。
有效但不适合的答案 -
1)在代码之前添加et_note.removeTextChangedListener(this)
并在代码之后添加et_note.addTextChangedListener(this)
- 这个有效但不正确且应用变得非常慢。
其他任何可以帮助我的方法?感谢。
答案 0 :(得分:0)
感谢CommonsWare,我找到了答案。只是发布这个答案来帮助别人。这解决了我的问题 -
而不是这个,
Spannable WordtoSpan = new SpannableString(et_note.getText());
WordtoSpan.setSpan(new ForegroundColorSpan(0xFF00FF00), ofe, nextOfe + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
et_note.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
我用过这个 -
et_note.getText().setSpan(new ForegroundColorSpan(0xFF00FF00), ofe, nextOfe + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);