web-dev-qa-db-fra.com

Comment désactiver le positionnement du curseur et la sélection de texte dans un EditText? (Android)

Je cherche un moyen d'empêcher l'utilisateur de déplacer la position du curseur n'importe où. Le curseur doit toujours rester à la fin de la valeur EditText actuelle. De plus, l'utilisateur ne devrait pas pouvoir sélectionner quoi que ce soit dans EditText. Avez-vous une idée de comment réaliser cela dans Android en utilisant un EditText?

Pour clarifier: l'utilisateur doit pouvoir insérer du texte, mais seulement à la fin.

30
Louis

J'ai eu le même problème. Cela a fini par travailler pour moi:

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);
    }

}
44
mikejonesguy

Essaye ça:

mEditText.setMovementMethod(null);
7
Jason Lin

Cela réinitialisera le focus du curseur à la dernière position du texte

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

Cette méthode désactivera le déplacement du curseur au toucher

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;
    }
}

Et vous pouvez utiliser soit l'attribut xml

Android: curseurVisible

ou la fonction Java

setCursorVisible (booléen)

désactiver le curseur clignotant d'edittext

7
Hein

Il semble que la meilleure façon de procéder consiste à créer votre propre classe CustomEditText et à remplacer/modifier toutes les méthodes pertinentes. Vous pouvez voir le code source pour EditText ici.

public class CustomEditText extends EditText {

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

    /* override other methods, etc. */

}
1
Alex Lockwood