web-dev-qa-db-fra.com

android comment définir le curseur EditText à la fin de son texte

L'utilisateur doit entrer son numéro de portable, le numéro de portable doit être composé de 10 numéros, j'ai utilisé TextWatcher pour le faire, comme ceci

et_mobile.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if (et_mobile.getText().toString().length() > 10) {
            et_mobile.setText(et_mobile.getText().toString()
                    .subSequence(0, 10));
            tv_mobileError.setText("Just 10 Number");
        }else{
            tv_mobileError.setText("*");
        }
    }
});

mais le problème est que lorsque l'utilisateur entre le 11ème chiffre, le curseur de l'edittext commence au début du texte, je veux qu'il soit toujours à la fin, comment?

26
William Kinaan

Vous avez deux options, les deux devraient fonctionner:

une)

editText.setText("Your text");
editText.setSelection(editText.getText().length());

b)

editText.setText("");    
editText.append("Your text");
101
jenzz
/**
 * Set pointer to end of text in edittext when user clicks Next on KeyBoard.
 */
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (b) {
            ((EditText) view).setSelection(((EditText) view).getText().length());
        }
    }
};

mEditFirstName.setOnFocusChangeListener(onFocusChangeListener);
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);

Cela fonctionne bien pour moi!

3
Anh Duy

Alors que jenzz anwser fonctionne pour le cas le plus simple. Ce n'est pas le cas si vous déplacez le curseur avant de modifier votre texte car dès que la deuxième lettre est saisie, il sera déplacé à la fin du texte d'édition.

Préférez utiliser cette solution:

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) 
            {
                ...
                int position = et_mobile.getSelectionStart();
                et_mobile.setText(f(s));
                et_mobile.setSelection(position);
                ...
            }
0
Gomino