编辑文本 - 明文时,光标开始每个字母



TextWatcher设置为EditText如下所示。但是当我尝试清除文本时,光标在清除每个字母后开始

  class MyInputWatcher implements TextWatcher {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        et.removeTextChangedListener(watcher2);
        et.setText(s.toString().replaceAll("[^[:alpha:]]", ""));
        et.addTextChangedListener(watcher2);
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
}

这样做(更新):

class MyInputWatcher implements TextWatcher {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                                  int after) {
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        String temp = s.toString().replaceAll("[^a-zA-Z]", "");
        if (s.toString().length() != temp.length()) {
            et.setText(temp);
            et.setSelection(temp.length());
        }
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
}

请像这样尝试

editText.setSelection(editText.getText().toString().length());

Subhash Kumar,你可以使用方法:

et.setSelection(position)

用于在需要位置显示光标

像这样在 afterTextChanged() 方法上设置光标的位置。

class MyInputWatcher implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
        int count) {
    et.removeTextChangedListener(watcher2);
    et.setText(s.toString().replaceAll("[^[:alpha:]]", ""));
    et.addTextChangedListener(watcher2);
}
@Override
public void afterTextChanged(Editable s) {
    et.setSelection(et.getText().toString().length())
}

}

每次清除字符时,它都会调用onTextChanged()方法,作为您的实现,它会获取编辑文本并重新设置为它,因此光标会到达文本的开头。清除et.setText(s.toString().replaceAll("[^[:alpha:]]", ""));,它将被修复。或者使用此et.setSelection(et.getText().toString().length+1);

相关内容

最新更新