Autoriser plusieurs lignes en mode EditText dans Android?

Réponses:

1176

Par défaut, tous les EditTextwidgets d'Android sont multilignes.

Voici un exemple de code:

<EditText
    android:inputType="textMultiLine" <!-- Multiline input -->
    android:lines="8" <!-- Total Lines prior display -->
    android:minLines="6" <!-- Minimum lines -->
    android:gravity="top|left" <!-- Cursor Position -->
    android:maxLines="10" <!-- Maximum Lines -->
    android:layout_height="wrap_content" <!-- Height determined by content -->
    android:layout_width="match_parent" <!-- Fill entire width -->
    android:scrollbars="vertical" <!-- Vertical Scroll Bar -->
/>
Shardul
la source
6
Existe-t-il un moyen de définir inputType sur textMultiLine et imeOptions sur actionSend? Je vois une touche Entrée sur le clavier S4 au lieu d'envoyer lorsque je définis inputType sur textMultiLine et imeOptions sur actionSend.
user484691
1
Pour "textMultiLine et imeOptions", voir stackoverflow.com/questions/5014219/…
TOMKA
2
Une chose à noter, l'ajout d'un inputTypeannule au moins les attributs lineset minLines. J'ai eu inputType="phone"et les attributs de lignes n'ont eu aucun effet
ono
2
Ne l'utilisez pas. Provoque un IndexOutOfBoundsExceptiondès que vous tapez quelque chose à cause deandroid:inputType="textMultiLine"
Chisko
si vous utilisez AppCompactTextView besoin de cette ligne android: inputType = "textMultiLine"
sourav pandit
260

Vous pouvez trouver préférable d'utiliser:

<EditText 
...
android:inputType="textMultiLine"
/>

En effet, android:singleLineest obsolète.

Knossos
la source
La réponse Sharduls devrait certainement fonctionner sur les Apis modernes. Depuis qu'ils ont retiré la singleLinepartie dépréciée de leur réponse (il y a longtemps). En ce qui concerne la question elle-même, c'est la partie la plus importante de leur réponse.
Knossos
Ne l'utilisez pas. Provoque un IndexOutOfBoundsExceptiondès que vous tapez quelque chose. Multiligne est désormais la valeur par défaut.
Chisko
@Chisko Un attribut XML ne provoquerait pas une exception IndexOutOfBoundsException. Je ne me souviens pas quand le type d'entrée par défaut a changé (l'a-t-il même fait?), Mais il est probablement préférable de le conserver pour des raisons de compatibilité descendante.
Knossos
1
@Knossos bien, aussi étrange que cela soit pour vous, c'est pour moi. J'ai littéralement copié-collé le code et planté à chaque fois avec toutes les combinaisons possibles de plusieurs paramètres jusqu'à ce que je le supprime. Allez comprendre.
Chisko
42

Cela fonctionne pour moi, en fait, ces 2 attributs sont importants: inputType et lines . De plus, vous aurez peut-être besoin d'une barre de défilement, le code ci-dessous montre comment en faire une:

 <EditText
        android:id="@+id/addr_edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top|left"
        android:inputType="textEmailAddress|textMultiLine"
        android:lines="20"
        android:minLines="5"
        android:scrollHorizontally="false"
        android:scrollbars="vertical" />
acoustique
la source
20

Voici comment j'ai appliqué l'extrait de code ci-dessous et cela fonctionne bien. J'espère que cela aiderait quelqu'un.

<EditText 
    android:id="@+id/EditText02"
    android:gravity="top|left" 
    android:inputType="textMultiLine"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:lines="5" 
    android:scrollHorizontally="false" 
/>

À votre santé! ...Merci.

Nandagopal T
la source
11

Essayez ceci, ajoutez ces lignes à votre vue d'édition de texte, j'ajouterai la mienne. assurez-vous de le comprendre

android:overScrollMode="always"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical"

<EditText
    android:inputType="textMultiLine"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText_newprom_description"
    android:padding="10dp"
    android:lines="5"
    android:overScrollMode="always"
    android:scrollbarStyle="insideInset"
    android:minLines="5"
    android:gravity="top|left"
    android:scrollbars="vertical"
    android:layout_marginBottom="20dp"/>

et sur votre classe java, cliquez sur listner ce texte d'édition comme suit, je vais ajouter le mien, chane noms selon le vôtre.

EditText description;
description = (EditText)findViewById(R.id.editText_newprom_description);

description.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                view.getParent().requestDisallowInterceptTouchEvent(true);
                switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){
                    case MotionEvent.ACTION_UP:
                        view.getParent().requestDisallowInterceptTouchEvent(false);
                        break;
                }

                return false;
            }

        });

cela fonctionne bien pour moi

Chathura Jayanath
la source
Merci! C'est ainsi que j'ai fait défiler un texte d'édition dans une vue déroulante.
Esdras Lopez
5

Tous ces éléments sont agréables mais ne fonctionneront pas si vous avez votre edittext à l'intérieur de la vue de défilement de niveau supérieur :) L'exemple le plus courant est peut-être la vue "Paramètres" qui a tellement d'éléments qu'ils dépassent la zone visible. Dans ce cas, vous les mettez tous en mode défilement pour faire défiler les paramètres. Dans le cas où vous avez besoin de texte d'édition défilable multiligne dans vos paramètres, son défilement ne fonctionnera pas.

Cynichniy Bandera
la source
5
 <EditText
           android:id="@id/editText" //id of editText
           android:gravity="start"   // Where to start Typing
           android:inputType="textMultiLine" // multiline
           android:imeOptions="actionDone" // Keyboard done button
           android:minLines="5" // Min Line of editText
           android:hint="@string/Enter Data" // Hint in editText
           android:layout_width="match_parent" //width editText
           android:layout_height="wrap_content" //height editText
           /> 
Yogesh Sarvaiya
la source
4

Pour désactiver le nombre de lignes précédemment attribuées dans le thème, utilisez l'attribut xml: android:lines="@null"

Oleg Bozhko
la source
4
android:inputType="textMultiLine"

Cette ligne de code fonctionne pour moi. Ajoutez ce code que vous éditez dans votre fichier xml.

Yıldırım
la source
3

Ajoutez-le simplement android:inputType="textMultiLine" dans un fichier XML sur le champ approprié.

Dinith
la source
1

J'ai appris cela de http://www.pcsalt.com/android/edittext-with-single-line-line-wrapping-and-done-action-in-android/ , bien que je n'aime pas le site Web moi-même. Si vous voulez multiligne MAIS que vous souhaitez conserver le bouton Entrée en tant que bouton de publication, définissez le "défilement horizontal" de la vue de liste sur false.

android:scrollHorizontally="false"

Si cela ne fonctionne pas en XML, cela fonctionne bizarrement par programmation.

listView.setHorizontallyScrolling(false);

Daniel Handojo
la source
1
<EditText
                android:hint="Address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:inputType="textMultiLine|textNoSuggestions"
                android:id="@+id/edittxtAddress"
                android:layout_marginLeft="@dimen/textsize2"
                android:textColor="@android:color/white"
                android:scrollbars="vertical"
                android:minLines="2"
            android:textStyle="normal" />

et dans l'activité pour supprimer "\ n", l'utilisateur appuie sur la ligne suivante

String editStr= edittxtAddress.getText().toString().trim();

 MyString= editStr.replaceAll("\n"," ");
Kapil Parmar
la source
1

si quelqu'un utilise AppCompatEditText, vous devez définir inputType = "textMultiLine" voici le code que vous pouvez copier


   <androidx.appcompat.widget.AppCompatEditText
        android:padding="@dimen/_8sdp"
        android:id="@+id/etNote"
        android:minLines="6"
        android:singleLine="false"
        android:lines="8"
        android:scrollbars="vertical"
        android:background="@drawable/rounded_border"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/_25sdp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="@dimen/_25sdp"
        android:autofillHints=""

        android:gravity="start|top"
        android:inputType="textMultiLine"
         />

pour le fond

   <?xml version="1.0" encoding="utf-8"?>
   <shape android:shape="rectangle" 
    xmlns:android="http://schemas.android.com/apk/res/android">
   <corners android:radius="@dimen/_5sdp"/>
   <stroke android:width="1dp" android:color="#C8C8C8"/>
   </shape>
pandav sourav
la source
0

Une autre chose intéressante à faire est d'utiliser android:minHeightavec android:layout_height="wrap_content". De cette façon, vous pouvez définir la taille de la modification lorsqu'elle est vide et lorsque l'utilisateur entre des éléments, il s'étire en fonction de la quantité des entrées utilisateur, y compris plusieurs lignes.

exemple de
la source