Multiline TextView sur Android?

j'ai fait comme ci-dessous dans xml

<TableRow>
    <TextView android:id="@+id/address1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4" 
        android:singleLine="false"              
        android:text="Johar Mor, Gulistan-e-Johar, Karachi" >
    </TextView> 
</TableRow>

ça ne marche pas pour multiline , et j'utilise TableLayout ...

alors, quelle est l'erreur que je fais ici?

122
demandé sur Sergey 2011-07-13 09:49:19

15 réponses

si le texte que vous mettez dans le TextView est court, il ne s'étendra pas automatiquement à quatre lignes. Si vous voulez que le TextView à toujours aient quatre lignes quelle que soit la longueur du texte, mettez l'attribut android:lines :

<TextView
    android:id="@+id/address1"
    android:gravity="left"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:maxLines="4"
    android:lines="4"
    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>

vous pouvez le faire avec TableRow, voir ci-dessous le code

<TableRow >
        <TextView
            android:id="@+id/tv_description_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:padding="8dp"
            android:text="@string/rating_review"
            android:textColor="@color/black"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:maxLines="4"`enter code here`
            android:padding="8dp"
            android:text="The food test was very good."
            android:textColor="@color/black"
            android:textColorHint="@color/hint_text_color" />
    </TableRow>
169
répondu Zarah 2018-04-27 10:37:57

j'ai essayé de commenter une des réponses ci-dessus mais je n'ai pas assez de réputation.

Je pensais juste ajouter que si vous utilisez:

android:inputType="textMultiLine"

puis la vue cesse d'être cliquable. J'ai essayé d'obtenir des textviews multi-ligne dans mon menu de tiroir de diapositives qui a évidemment besoin de répondre à des clics.

le android:singleLine="false" fonctionnait bien cependant.

91
répondu Ryan 2015-04-20 10:47:50

Je n'aime aucune des réponses. Il suffit de définir inputType et TextView s'adaptera à son contenu

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"/>

testé sur Nexus One (2.3) et Nexus 4 (4.4)

28
répondu Maragues 2013-12-05 10:57:53

il suffit d'ajouter textview dans ScrollView

<ScrollView
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:layout_marginLeft="15dp"
           android:layout_marginRight="15dp"
           android:layout_marginTop="20dp"
           android:fillViewport="true">

           <TextView
               android:id="@+id/txtquestion"
               android:layout_width="fill_parent"
               android:layout_height="match_parent"
               android:background="@drawable/abs__dialog_full_holo_light"
               android:lines="20"
               android:scrollHorizontally="false"
               android:scrollbars="vertical"
               android:textSize="15sp" />

       </ScrollView>
10
répondu Pravin Bhosale 2014-07-01 10:53:52

mettez simplement '\n' dans votre texte... no extra attribut required :)

          <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Pigeon\nControl\nServices"
            android:id="@+id/textView5"
            android:layout_gravity="center"
            android:paddingLeft="12dp"/> 
7
répondu Naunidh Singh 2015-08-08 06:03:56

Je n'aime pas la solution qui force le nombre de lignes dans la vue texte. Je vous suggère plutôt de le résoudre via la solution proposée ici . Comme je le vois, L'OP a également du mal à faire en sorte que la vue de texte ressemble à la bonne dans le tableau et shrinkColumns est la bonne directive à passer pour atteindre ce qui est voulu.

5
répondu Boris Strandjev 2017-05-23 12:26:36

essayez de travailler avec EditText en le rendant unclickable et unfocusable, vous pouvez également afficher une barre de défilement et supprimer la barre inférieure D'EditText.

Voici un exemple:

<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:inputType="textMultiLine"                   <!-- multiline -->
android:clickable="false"                         <!-- unclickable -->
android:focusable="false"                         <!-- unfocusable -->
android:scrollbars="vertical"     <!-- enable scrolling vertically -->
android:background="@android:color/transparent"   <!-- hide the underbar of EditText -->
/>  

Espérons que cela aide :)

5
répondu Khalil Meg 2017-10-28 10:58:38

Ce que j'ai appris, c'était d'ajouter "\n" entre les mots où vous voulez frein dans la ligne suivante. Exemple...

<TextView
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:text="M-F 9am-5pm \n By Appointment Only" />

le \N entre 17 heures et par m'a permis plus de contrôle de l'endroit où je voulais que ma prochaine ligne commence et se termine.

2
répondu Eduardo Lopez 2017-02-17 09:42:20

la meilleure réponse que j'ai trouvée pour multiline TextView est:

android:inputType="textMultiLine"
2
répondu Bhuvan Bhatt 2017-06-15 14:37:40

remplacer "\n" par Html equavalent "&lt;br&gt;" Html.fromHtml() sur la chaîne. Suivez les étapes ci-dessous:

String text= model.getMessageBody().toString().replace("\n", "&lt;br&gt;")
textView.setText(Html.fromHtml(Html.fromHtml(text).toString()))

Cela fonctionne parfaitement.

2
répondu Gulzar Bhat 2017-09-19 07:05:33

j'ai utilisé:

TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table);
tablelayout.setColumnShrinkable(1,true);

ça a marché pour moi. 1 est le nombre de colonnes.

1
répondu Susana Mar Flores 2014-09-10 11:09:33

pour moi, aucune des solutions n'a fonctionné. Je sais que ce n'est pas une réponse complète à cette question, mais parfois, ça peut aider.

j'ai mis 4 textviews dans un linéaire vertical.

<Linearlayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation:"vertical"

    ...>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line1"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line2"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line3"
       .../>
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text:"line4"
       .../>
</LinearLayout>

cette solution est bonne pour les cas où le texte de vue de texte est constant, comme les étiquettes.

0
répondu saleh sereshki 2018-01-23 11:25:35
You can do this with TableRow, see below code

<TableRow >
    <TextView
        android:id="@+id/tv_description_heading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:padding="8dp"
        android:text="@string/rating_review"
        android:textColor="@color/black"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:maxLines="4"`enter code here`
        android:padding="8dp"
        android:text="The food test was very good."
        android:textColor="@color/black"
        android:textColorHint="@color/hint_text_color" />
</TableRow>
0
répondu Jitendra Nandiya 2018-04-27 10:12:03

pourquoi ne pas déclarer une chaîne de caractères au lieu d'écrire de longues lignes dans le fichier de mise en page. Pour cela, vous devez déclarer une ligne de code dans le fichier de mise en page 'android:text="@string/text"' et aller à la \\app\src\main\res\values\strings.xml et ajouter une ligne de code 'votre texte multiligne ici' utilisez aussi '\n' pour casser la ligne à partir de n'importe quel autre point la ligne sera automatiquement ajustée.

-1
répondu Tara Prasad Sharma 2016-09-24 03:23:49

TextView sera multi-ligne quand il n'aura pas assez d'espace pour s'insérer dans la ligne simple et singLine Non défini à true.

Si elle obtient l'espace dans une ligne, il ne sera pas multi-ligne.

-19
répondu Rasel 2015-07-05 06:22:26