2017-01-31 20 views
0

Ich setze TextWatcher auf EditText wie unten. Wenn ich versuche, den Text zu löschen, beginnt der Cursor nach dem Löschen aller Buchstaben.EditText - Cursor, der für jeden Buchstaben beginnt, wenn Klartext

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

Code verwenden innen 'afterTextChanged' – W4R10CK

Antwort

0

Machen Sie es wie folgt aus (AKTUALISIERT):

et.setSelection(position) 

für die Anzeige von Cursor in Not Position Sie

+0

dies wird dieser Stapelüberlaufausnahme –

+0

Bitte benutzen Sie geben ..... seine arbeitete ich es getestet von mir selbst – Ashish

+0

Dies funktioniert gut, aber immer wenn Text eingefügt wird, bewegt sich der Cursor automatisch zur letzten Position. Im normalen Bearbeitungstext wird es sich nicht so bewegen. –

0

Subhash Kumar, Sie Methode verwenden können, Löschen Sie ein Zeichen ruft es onTextChanged() Methode, wie Ihre Implementierung es den Text bearbeiten Text und zurück Stellen Sie es so ein, dass der Cursor zum Anfang des Textes kommt. Löschen Sie et.setText(s.toString().replaceAll("[^[:alpha:]]", "")); und es wird behoben. Oder verwenden Sie diese et.setSelection(et.getText().toString().length+1);

0

Jedes Mal: ​​

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

Dies wird den Cursor an das Ende des Textes bewegen. Wenn ich aus der Mitte löschen möchte, wird dies nicht funktionieren –

+0

Dann löschen Sie diese et.setText (s.toString(). ReplaceAll ("[^ [: alpha:]]", "")); ' –

0

Setzen Sie die Position auf Ihren Cursor auf afterTextChanged() -Methode wie folgt.

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

Dies wird die verschieben Cursor zum Ende des Textes. Wenn ich von der Mitte löschen möchte, wird dies nicht funktionieren –

+0

Dann müssen Sie die Position des Cursors manuell berechnen. –

0

Bitte versuchen Sie mögen dieses

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