TextView multiligne sous Android?


154

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>

Cela ne fonctionne pas pour multiline, et j'utilise TableLayout...

alors quelle erreur je fais ici?

Réponses:


197

Si le texte que vous insérez TextViewest court, il ne sera pas automatiquement étendu à quatre lignes. Si vous voulez TextViewà toujours avoir quatre lignes quelle que soit la longueur du texte, définissez l' android:linesattribut:

<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 le code ci-dessous

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

21
L'OP ne «voulait pas que le TextView ait toujours quatre lignes quelle que soit la longueur du texte qu'il contient».
tar

7
Cette réponse a fonctionné pour moi. Mais j'ai obtenu les meilleurs résultats, pas avec des maxlines et des lignes, mais avec des maxlines et des minlines et je n'ai pas utilisé de lignes. J'ai mis les minlines à 1 et les maxlines plus grandes que les plus grosses données. De cette façon, j'obtiens 1 à N lignes pour une vue compacte des données.
R Earle Harris

1
@REarleHarris: J'ai aussi essayé la même solution mais le problème est qu'elle ne prend pas le nombre de maxLines. Toutes les données sont affichées en nombre de minLines. Que puis-je essayer maintenant J'utilise la vue de texte personnalisée dans le xml
Sagar Devanga

119

Je pensais juste ajouter que si vous utilisez:

android:inputType="textMultiLine"

Ensuite, la vue cesse d'être cliquable. J'essayais d'obtenir des vues de texte sur plusieurs lignes dans le menu de mon tiroir de diapositives qui doit évidemment répondre aux clics.

Le android:singleLine="false"a bien fonctionné cependant.


3
Ce n'est pas exactement correct car les propres erreurs de charpie d'Android suggèrent que vous n'utilisez cet attribut qu'avec EditText et non TextView.
Jared

1
Faites-vous référence au textMultiline? J'ai dit de ne pas utiliser ça. singleLine fonctionne bien sur TextViews: developer.android.com/reference/android/widget/…
Ryan

3
android: singleLine est obsolète maintenant
Humberto Castañeda

Êtes-vous sûr? Il ne mentionne pas que dans les documents auxquels je renvoie dans le commentaire ci-dessus, bien que je viens de voir qu'il est marqué comme tel dans les documents res. Étrange, ils ne mentionnent pas cela sur la page TextView. Le problème est que la solution de contournement qu'ils suggèrent (multiligne) empêche la vue d'être cliquable lorsque je mets dans mon OP. developer.android.com/reference/android/R.attr.html#singleLine
Ryan

3
android: singleLine = "false" est obsolète car c'est la valeur par défaut
Ashraf Alshahawy

28

Je n'aime aucune des réponses. Définissez simplement le inputType et le TextView s'adaptera à son contenu

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

Testé sur un Nexus One (2.3) et un Nexus 4 (4.4)


52
android: inputType = "textMultiLine" n'est pas pour TextView, c'est pour EditText et vous obtenez un avertissement si vous essayez de le faire
bhaskarc

2
Vous devriez écouter les avertissements. Utilisez la solution @Ryans.
m02ph3u5

15

Mettez simplement '\ n' dans votre texte ... aucun attribut supplémentaire requis :)

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

6
cette solution ne peut pas être utilisée pour définir du texte dynamiquement
Sagar Devanga

@SagarDevanga Que signifie définir du texte dynamiquement?
juil

3
@SagarDevanga, je viens de vérifier, les textes dynamiques et statiques sont multilignes par défaut (si utilisé \n), donc c'est une bonne solution. Non singleLine=false, non lines=4et ainsi de suite.
CoolMind

10

Ajoutez simplement une vue de texte 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>

5

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, le PO a également du mal shrinkColumnsà donner l' impression que la vue du texte est correcte dans le tableau et est la bonne directive à transmettre pour obtenir ce que l'on veut.


5

Essayez de travailler avec EditText en le rendant non cliquable et non focalisable, vous pouvez également afficher une barre de défilement et supprimer la barre inférieure de 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 -->
/>  

J'espère que cela t'aides :)


3

Remplacez d'abord "\n"par son Htmléquivalent "&lt;br&gt;" puis appelez Html.fromHtml()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

Ce que j'ai appris, c'est d'ajouter "\ n" entre les mots où vous voulez qu'il entre dans la ligne suivante. Par 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 h et By m'a permis de mieux contrôler où je voulais que ma prochaine ligne commence et se termine.


2

La meilleure réponse que j'ai trouvée pour TextView multiligne est:

android:inputType="textMultiLine"

8
N'est-ce pas android:inputTypeun attribut pour <EditText>pas pour <TextView>?
timtim le

Un avertissement apparaît si vous ajoutez cet attribut à un TextView. - L'androïde attribué: inputType = "textMultiLine" ne doit pas être utilisé avec <TextView>. En fait, cet attribut est pour EditText.
Yhondri

2

vous pouvez utiliser android: inputType = "textMultiLine"

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

1
Ceci est affiché comme un avertissement. Non destiné à être utilisé pour TextView
Stealth Rabbi

1
inputType ne prend en charge que les composants EditText.
Chamin Wickramarathna

1

J'ai utilisé:

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

cela a fonctionné pour moi. 1 est le nombre de colonnes.


0
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

Manière la plus simple

<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,\n Gulistan-e-Johar,\n Karachi" >
    </TextView> 
</TableRow>

Utilisez \nlà où vous voulez insérer une nouvelle ligne J'espère que cela vous aidera


0

La clé est une vue textuelle avec singleline=false(qui oui est obsolète, mais qui est indispensable pour fonctionner) combinée avec lines, maxlinesouminlines

<TextView
                android:id="@+id/txtBowlers"
                style="@style/Default_TextBox.Small"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="4dp"
                android:singleLine="false"
                android:maxLines="6"
                android:text="Bob\nSally\nJohn"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="@+id/txtTeamName"
                app:layout_constraintTop_toBottomOf="@+id/txtTeamName"/>

-1

Pourquoi ne déclarez-vous pas une chaîne 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 dans \\ app \ src \ main \ res \ values ​​\ strings.xml et ajouter une ligne de code 'Votre texte multiligne ici' Utilisez également '\ n' pour couper la ligne à partir de n'importe quel point sinon la ligne sera automatiquement ajustée.


-4

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

J'ai mis 4 vues de texte dans une disposition linéaire verticale.

<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 convient aux cas où le texte de la vue texte est constant, comme les étiquettes.


1
Ne faites pas ça.
humble_wolf

-23

TextView sera multi-lignes lorsqu'il ne disposera pas de suffisamment d'espace pour tenir dans la ligne unique et que singLine n'est pas défini sur true.

S'il obtient l'espace sur une ligne, ce ne sera pas multi-lignes.


7
Que faire si je veux utiliser fill_parent au lieu de la largeur fixe? Mon contenu est coupé, si je le fais ...
happyhardik

6
Je vais essayer android:singleLine="false"ou android:inputType="textMultiLine"(comme décrit par Marageus) .Avis qui android:inputType="textMultiLine"prévaut lorsque les deux sont présents
Romantic Electron

Partageant le point de vue des autres qui ont commenté, c'est complètement faux et je suis stupéfait de savoir pourquoi c'est la réponse acceptée.
Aleks G du
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.