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 -->
/>

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.


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" />

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.


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


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.


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
           /> 

4

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


4
android:inputType="textMultiLine"

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


3

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


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


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"," ");

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>

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.