由于 setSelection(),EditText 中的文本删除停止
Text deletion in EditText stops because of setSelection()
我想用以下代码突出显示 EditText
中的一些词:
mEditText.addTextChangedListener(new TextWatcher() {
private boolean ignoreChange = false;
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
int cursorPosition = mEditText.getSelectionStart();
if(!ignoreChange){
//Highlight words
ignoreChange = true;
mEditText.setText(spannable);
mEditText.setSelection(cursorPosition);
ignoreChange = false;
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
所以,有两个问题:
-当我触摸键盘上的删除按钮时,它只删除一个字符而不是删除所有字符,直到我触摸按钮。
-文字输入很慢
我看到的这两个问题都是因为 setSelection(..)
。我使用 setSelection(..)
因为 setText(..)
将光标发送到 EditText
.
的开头
所以,问题的解决方案是把代码从
onTextChanged(...)
方法转化为 afterTextChanged(...)
。
这样我们就可以通过可编辑对象直接编辑EditText
的文本,所以我们不需要调用mEditText.setText(...)
和mEditText.setSelection(...)
我想用以下代码突出显示 EditText
中的一些词:
mEditText.addTextChangedListener(new TextWatcher() {
private boolean ignoreChange = false;
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
int cursorPosition = mEditText.getSelectionStart();
if(!ignoreChange){
//Highlight words
ignoreChange = true;
mEditText.setText(spannable);
mEditText.setSelection(cursorPosition);
ignoreChange = false;
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
所以,有两个问题:
-当我触摸键盘上的删除按钮时,它只删除一个字符而不是删除所有字符,直到我触摸按钮。
-文字输入很慢
我看到的这两个问题都是因为 setSelection(..)
。我使用 setSelection(..)
因为 setText(..)
将光标发送到 EditText
.
所以,问题的解决方案是把代码从
onTextChanged(...)
方法转化为 afterTextChanged(...)
。
这样我们就可以通过可编辑对象直接编辑EditText
的文本,所以我们不需要调用mEditText.setText(...)
和mEditText.setSelection(...)