2017-01-31 11 views
0

Я установил TextWatcher в EditText, как показано ниже. Но когда я пытаюсь очистить текст, курсор начнет после очистки каждой буквы.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) { 

    } 
} 
+0

использовать свой код в 'afterTextChanged' – W4R10CK

ответ

0

ли это так (ОБНОВЛЕНО):

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) { 
    } 
} 
+0

это даст переполнение стека исключений –

+0

Пожалуйста, используйте этот ..... его работал я тестировал сам по себе – Ashish

+0

Это прекрасно работает, но всякий раз, когда вы вставляете текст, курсор автоматически перемещается в последнюю позицию. В нормальном текстовом редакторе он не будет двигаться так. –

0

Subhash Кумар, вы можете использовать метод:

et.setSelection(position) 

для отображения курсора в позиции необходимости

0

Каждый раз, когда вы очистить символ, который он называет onTextChanged(), так как ваша реализация получает текст edittext и обратно установите его, чтобы курсор дошел до начала текста. Очистите et.setText(s.toString().replaceAll("[^[:alpha:]]", ""));, и он будет исправлен. Или используйте это et.setSelection(et.getText().toString().length+1);

+0

Это переместит курсор в конец текста. Если я хочу очистить от середины, это не сработает –

+0

Затем очистите это 'et.setText (s.toString(). ReplaceAll (" [^ [: alpha:]] "," "));' –

0

Установите положение курсора на метод 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()) 
} 

}

+0

Это приведет к перемещению курсор до конца текста. Если я хочу очистить с середины, это не сработает –

+0

Затем вы должны вычислить позицию курсора вручную. –

0

Пожалуйста, попробуйте как этот

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

 Смежные вопросы

  • Нет связанных вопросов^_^