web-dev-qa-db-fra.com

Android Word-Wrap EditText text

J'ai essayé d'obtenir ma boîte EditText à Word Wrap, mais ne semble pas pouvoir le faire.

J'ai traité des problèmes beaucoup plus complexes lors du développement d'applications Android, et cela semble être un processus simple.

Cependant, le problème persiste et j'ai une grande zone de texte qui ne me permet que de saisir du texte sur une seule ligne, en continuant tout droit, en défilant horizontalement lorsque je saisis du texte.

Voici le code XML de l'objet EditText de mon fichier de présentation.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    Android:id="@+id/myWidget48"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    >
 <ScrollView
    Android:id="@+id/myScrollView"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_weight="1"
    >
    <LinearLayout
        Android:id="@+id/widget37"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical"
    >

<EditText
        Android:id="@+id/txtNotes"
        Android:layout_width="300px"
        Android:layout_height="120px"
        Android:scrollbars="vertical"
        Android:textSize="18sp"
        Android:gravity="left"
        Android:layout_marginTop="10dip"
        Android:inputType="textCapSentences"
        >
    </EditText>
</LinearLayout>
</ScrollView>
</LinearLayout>
64
Bryan

En plus de trouver la source du problème, j'ai trouvé la solution. Si Android:inputType est utilisé, textMultiLine doit être utilisé pour activer la prise en charge multiligne. De plus, l’utilisation de inputType remplace le code Android:singleLine="false". Si vous utilisez inputType, alors, répétons-le, textMultiLine doit être utilisé ou l'objet EditText ne comportera qu'une seule ligne, sans le wrapping Word.

Edit: Merci Jacob Malliet pour nous avoir fourni de bons conseils à ce sujet. Il a suggéré de définir la propriété boolean scrollHorizontally sur false, 'Android:scrollHorizontally="false"'

Exemple de code XML:

<EditText
    Android:id ="@+id/edtInput"
    Android:layout_width ="0dip" 
    Android:layout_height ="wrap_content" 
    Android:layout_weight ="1" 
    Android:inputType="textCapSentences|textMultiLine"
    Android:maxLines ="4" 
    Android:maxLength ="2000" 
    Android:hint ="@string/compose_hint"
    Android:scrollHorizontally="false" />
149
Bryan

Ok je l'ai compris, vous devez définir Android:scrollHorizontally="false" pour votre EditText dans votre xml. Je suis à peu près sûr que ça devrait marcher.

18
Jacob Malliet

Supposons que vous souhaitiez simplement avoir une ligne au début, puis l'étendez à 5 lignes et que vous souhaitiez un maximum de 10 lignes.

<EditText
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:id="@+id/etMessageBox"
                    Android:layout_alignParentLeft="true"
                    Android:layout_centerVertical="true"
                    Android:autoLink="all"
                    Android:hint="@string/message_edit_text_hint"
                    Android:lines="5"
                    Android:minLines="1"
                    Android:gravity="top|left"
                    Android:maxLines="10"
                    Android:scrollbars="none"
                    Android:inputType="textMultiLine|textCapSentences"/>

En augmentant Android:lines, vous pouvez définir le développement du nombre de lignes. 

14
Hesam

Je l'ai compris. La ligne,

Android:inputType="textCapSentences"

était le problème. Ajouter cette ligne à un objet EditText transformera cet objet en une seule ligne EditText et ne laissera pas les mots envelopper, ni ne permettra à un utilisateur d'appuyer sur 'Entrée' pour insérer un saut de ligne ou un retour à la ligne dans EditText.

9
Bryan

vous devez ajouter l'attribut suivant à votre edittext.

Android:inputType="textMultiLine"

De même, si vous définissez la hauteur ou le nombre maximal de lignes d'edittext sur une valeur spécifique, le texte défilera lorsque vous aurez saisi beaucoup de caractères.

8
Özer Özcan

Le fait de placer l’ensemble de l’activité dans la vue par défilement et de placer le texte de montage suivant dans une présentation linéaire a fonctionné à merveille. 

Le texte de montage défilerait verticalement en appuyant sur Entrée, coder comme suit 

<EditText
            Android:id="@+id/editText1"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_weight="1"
            Android:ems="10"
            Android:hint="Enter somehting"
            Android:inputType="textMultiLine"
            Android:maxLength="2000"
            Android:maxLines="6"
            Android:scrollHorizontally="false"
            Android:scrollbars="vertical" > 
6
San

Essayez ceci, changer la gravité en haut à gauche a fonctionné pour moi, avec le type de saisie textmultiline

<EditText
    Android:layout_width="200dp"
    Android:layout_height="match_parent"
    Android:layout_gravity="center"
    Android:background="@color/color_red"
    Android:focusable="true"
    Android:focusableInTouchMode="true"
    Android:gravity="top|left"
    Android:inputType="textMultiLine|textCapSentences"
    Android:lines="10"
    Android:maxWidth="200dp"
    Android:maxLength="200"
    Android:maxLines="10"
    Android:singleLine="false"
    Android:textColor="@Android:color/white"
    Android:textSize="26sp" />
1
Eeshdaya Umarikar

Définissez également la valeur largeur de la structure parent, (propriété Layout_width) . Par exemple layout_width = 250sp

sinon, EditText ou TextView ne se termine pas à la ligne suivante jusqu'à ce qu'il atteigne la fin de la frontière mobile. Alors définissez Layout_width

0
Victor

Pour ceux qui le font de manière pragmatique, vous voudrez peut-être examiner cette question Android EditText Multiline ne fonctionne pas comme il se doit pour vérifier que vous définissez correctement le type d'entrée. C'était mon problème

0
Jerry Sha