84 votes

Android Word-Wrap EditText text

J'ai essayé d'obtenir mon EditText boîte à retour automatique à la ligne, mais ne semble pas possible de le faire.

J'ai eu affaire à des problèmes plus complexes, tout en développant des applications pour Android, et cela semble comme il devrait être un processus simple.

Cependant, la question demeure, et j'ai une grande zone de texte qui est seulement en me permettant de saisir du texte sur une seule ligne, en continuant tout droit, faire défiler horizontalement comme je l'entrer du texte.

Voici le code XML pour l'EditText objet de mon fichier de mise en page.

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

187voto

Bryan Hepburn Points 1047

En plus de trouver la source du problème, j'ai trouvé la solution. Si android:inputType est utilisé, alors textMultiLine doit être utilisé pour activer le mode multi-support. Aussi, à l'aide de inputType remplace le code android:singleLine="false". Si vous utilisez inputType, puis, à réitérer, textMultiLine doit être utilisé ou le EditText objet ne sera formée que d'une seule ligne, sans mot d'habillage.

Edit: Merci Jacob Malliet pour fournir de plus amples bons conseils sur ce. Il a suggéré de fixer le booléen scrollHorizontally valeur false à la propriété, '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" />

26voto

Jacob Malliet Points 274

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.

21voto

Hesam Points 6415

Supposons que vous souhaitiez simplement avoir une ligne au début, puis l'étendre à 5 lignes et que vous souhaitiez avoir 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 augmenter le nombre de lignes.

11voto

Bryan Hepburn Points 1047

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.

6voto

San Points 346

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 à éditer 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" > 
 

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