我使用TextWatcher
修改EditText
,使其始终显示为#tag1 #tag2...
这是我的代码:
editHashtags.addTextChangedListener(new TextWatcher() {
private boolean lock = false;
private String toGo;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(before == 1) return;
toGo = s.toString();
if(toGo.charAt(0) != '#') {
toGo = '#' + toGo;
}
if(toGo.charAt(start) == ' ' && toGo.charAt(start - 1) == '#' && start > 0
|| toGo.charAt(start) == ' ' && toGo.charAt(start - 1) == ' ' && start > 0) {
toGo = toGo.substring(0, toGo.length() - 1);
} else if(toGo.charAt(start) == ' ') {
toGo += '#';
} else if(toGo.charAt(start) != '#' && toGo.charAt(start - 1) == ' ') {
toGo = toGo.substring(0, toGo.length() - 1) + '#' + toGo.charAt(start);
}
}
@Override
public void afterTextChanged(Editable s) {
if(lock) return;
toGo = toGo.replaceAll("#+", "#");
lock = true;
editHashtags.setText(toGo);
editHashtags.setSelection(toGo.length());
lock = false;
}
});
问题是当我使用lock
更改文本时。看起来setText
真的很慢,所以如果我快速输入,会忽略一些字符。
解决此问题的最佳方法是什么?
谢谢。
答案 0 :(得分:1)
使用EditText
修改TextWatcher
的正确方法是修改Editable
方法上收到的可变对象afterTextChanged
。
答案 1 :(得分:0)
您还可以考虑实现自定义TransformationMethod,这可能会为您带来更好的效果。例如,类似于框架ReplacementTransformationMethod的实现。