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.

2voto

priyanka Points 21

Voici la solution....

<EditText
   android:id="@+id/editText"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:maxLength="150"                                 
   android:textSize="15dp"
   android:imeOptions="actionDone"
   android:inputType="text|textMultiLine"/>

Utilisation dans une classe java

editText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent event) {

            if (keyCode==KeyEvent.KEYCODE_ENTER)
            {
                // Just ignore the [Enter] key
                return true;
            }
            // Handle all other keys in the default way
            return (keyCode == KeyEvent.KEYCODE_ENTER);
        }
    });

1voto

Olayinka Points 795

La réponse acceptée fonctionnait si bien jusqu'à ce que je copie du texte avec des sauts de ligne dans l'EditText. J'ai donc ajouté onTextContextMenuItem pour surveiller l'action de collage.

@Override
public boolean onTextContextMenuItem(int id) {
    boolean ret = super.onTextContextMenuItem(id);
    switch (id) {
        case android.R.id.paste:
            onTextPaste();
            break;
    }
    return ret;
}

public void onTextPaste() {
    if (getText() == null)
        return;
    String text = getText().toString();
    text = text.replaceAll(System.getProperty("line.separator"), " ");
    text = text.replaceAll("\\s+", " ");
    setText(text);
}

1voto

Ali hasan Points 318

Vous pouvez modifier le bouton d'action à partir du code

editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.setRawInputType(InputType.TYPE_CLASS_TEXT)

Xml

android:inputType="textMultiLine"

0voto

farid_z Points 375

Pour un URI que vous pourriez utiliser :

android:inputType="textUri"
android:lines="1"
android:maxLength="128"

Sinon, android:inputType="textPersonName" comme mentionné ci-dessus, fonctionne pour d'autres EditText tels que le nom d'utilisateur, etc.

0voto

Anders Points 13
<EditText 
  android:id="@+id/Msg"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"              
  android:layout_marginTop="5dip"
  android:lines="5"
  android:selectAllOnFocus="true"               
  android:hint="Skriv meddelande...\n(max 100tkn)"/>

EditText et = (EditText)findViewById(R.id.Msg);
String strTmp = et.getText().toString();
strTmp = strTmp.replaceAll("\\n"," ");

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