75 votes

Empêcher l'utilisation de la touche d'entrée dans l'EditText tout en affichant le texte sur plusieurs lignes

Comment puis-je créer un EditText sur Android de telle sorte que l'utilisateur ne puisse pas saisir un texte sur plusieurs lignes, mais que l'affichage soit tout de même sur plusieurs lignes (c'est-à-dire qu'il y ait un retour à la ligne au lieu que le texte se déplace vers la droite) ?

C'est similaire à l'application SMS intégrée où nous ne pouvons pas saisir de nouvelle ligne mais où le texte est affiché sur plusieurs lignes.

11 votes

Ajoutez simplement Android:inputType="textPersonName" à l'EditText pour l'empêcher d'appuyer sur la touche Entrée.

8voto

Rolf Smit Points 1678

La réponse fournie par @Andreas Rudolph contient un bug critique et ne devrait pas être utilisée. Le code provoque un IndexOutOfBoundsException lorsque vous passez du texte à l'intérieur du EditText qui contient plusieurs caractères de nouvelle ligne. Cela est dû au type de boucle utilisé, la boucle Editable appellera l'objet afterTextChanged dès que son contenu est modifié (remplacement, suppression, insertion).

Code correct :

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    public void afterTextChanged(Editable s) {
        /*
         * The loop is in reverse for a purpose,
         * each replace or delete call on the Editable will cause
         * the afterTextChanged method to be called again.
         * Hence the return statement after the first removal.
         * http://developer.android.com/reference/android/text/TextWatcher.html#afterTextChanged(android.text.Editable)
         */
        for(int i = s.length()-1; i >= 0; i--){
            if(s.charAt(i) == '\n'){
                s.delete(i, i + 1);
                return;
            }
        }
    }
});

5voto

CapDroid Points 19038

Essayez ça :

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_ENTER)
    {
        //Nothing
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

5voto

Juan Carlos Points 24

Je le teste et cela semble fonctionner :

EditText editText = new EditText(context);
editText.setSingleLine(false);
editText.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT);

3voto

Buddy Points 1761

Vous pouvez le définir à partir du xml comme ceci :

android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="10"

n'oubliez pas android:inputType="text" si vous ne le réglez pas, ça ne marche pas. Je ne sais pas pourquoi. N'oubliez pas non plus de modifier maxLines à votre valeur préférée.

3voto

Royce Raju Beena Points 808

Il suffit d'ajouter

        android:singleLine="true"

à votre EditText

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X