2010-08-10 11 views
10

Angenommen, ein Benutzer hat einen Text in eine EditText geschrieben und danach irgendwo anders auf dem Bildschirm berührt, wodurch sich die Cursorposition änderte: Wie kann man die neue Cursorposition bestimmen?EditText Cursorposition

Antwort

24

Die einfache Version:

myEditText.getSelectionStart(); 

Wenn Sie auf ein Ereignis reagieren wollen, können Sie

myEditText.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     // view is myEditText here 
    } 
}); 

event versuchen können zwischen drückt und unterscheiden.

EditText hat auch eine setOnClickListener(), die einen Blick wert sein könnte.

EDIT: Ich habe vergessen, onSelectionChanged(int selStart, int selEnd) zu erwähnen, wo selEnd selStart gleich ist, wenn die Position geändert.

+2

Zur Klarstellung: OnSelectionChanged() muss in EditText Subklassen außer Kraft gesetzt werden, nützlich zu sein. OnTouch-Ereignisse treten nur auf, wenn der Benutzer den Bildschirm buchstäblich berührt. OnClick-Ereignisse können ausgelöst werden, wenn der Benutzer den Bildschirm berührt, oder über bestimmte physische Eingaben, z. D-Pad-Mitte, Trackball-Klick usw. – greg7gkb

2

beste und sichere Art und Weise verwendet TextWatcher

 @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
       int cursorIndex = start + 1; 
     }