2012-06-23 5 views
23

Ich bin auf der Suche nach einer Möglichkeit zu verhindern, dass der Benutzer die Cursorposition irgendwo verschieben. Der Cursor sollte immer am Ende des aktuellen EditText-Werts bleiben. Außerdem sollte der Benutzer im EditText nichts auswählen können. Haben Sie eine Idee, wie Sie das in Android mit einem EditText realisieren?Wie kann die Cursorpositionierung und Textauswahl in einem EditText deaktiviert werden? (Android)

Um zu verdeutlichen: Der Benutzer sollte in der Lage sein, Text, aber nur am Ende einzufügen.

Antwort

35

Ich hatte das gleiche Problem. Dies endete für mich arbeiten:

public class CustomEditText extends EditText { 

    @Override 
    public void onSelectionChanged(int start, int end) { 

     CharSequence text = getText(); 
     if (text != null) { 
      if (start != text.length() || end != text.length()) { 
       setSelection(text.length(), text.length()); 
       return; 
      } 
     } 

     super.onSelectionChanged(start, end); 
    } 

} 
+1

Ja, ich landete etwas ähnlich. Ich bin nicht sehr zufrieden mit dieser Lösung, da es immer noch diesen blauen Griff gibt, aber es ist in Ordnung, solange ich keinen besseren Ansatz kenne. Danke trotzdem. –

+2

Große Antwort. Das funktioniert perfekt. – toobsco42

+0

Danke! Genau das habe ich gebraucht. – CodyMace

6

Dies wird zurückgesetzt Cursor Fokus auf die letzte Position des Textes

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

Diese Methode wird Cursor-Bewegung auf

public class MyEditText extends EditText{ 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     final int eventX = event.getX(); 
     final int eventY = event.getY(); 
     if((eventX,eventY) is in the middle of your editText) 
     { 
       return false; 
     } 
     return true; 
    } 
} 

Touch deaktivieren und Sie können entweder das XML-Attribut

verwenden

android: cursorvisible

oder die Java-Funktion

setCursorVisible (boolean)

blinkender Cursor von EditText zu deaktivieren

+0

Beachten Sie, dass Sie noch über Pfeiltasten/Trackball/D-Pad kümmern um die Cursorposition zu ändern - die durch gehandhabt werden könnten eine Art 'onKeyDown()' shenanigans. Und das * deaktiviert * die Auswahl nicht, und ich weiß nicht, ob das möglich ist. – CommonsWare

+0

Danke, aber das ist nicht genau die Lösung, nach der ich gesucht habe. Das Problem beim Deaktivieren aller Berührungsereignisse in der Ansicht besteht darin, dass Sie die Ansicht überhaupt nicht fokussieren können. Und ich hätte gerne einen blinkenden Cursor - nur die Möglichkeit den Cursor zu bewegen sollte deaktiviert sein. –

1

Es ist wie der beste Weg, klingt dies zu tun, ist Ihre eigene CustomEditText Klasse zu machen und überschreiben/ändern Sie alle relevanten Methoden. Sie können die source code für EditText hier sehen.

public class CustomEditText extends EditText { 

    @Override 
    public void selectAll() { 
     // Do nothing 
    } 

    /* override other methods, etc. */ 

} 
2

starten:

mEditText.setMovementMethod(null); 
Verwandte Themen