web-dev-qa-db-fra.com

Multiline TextView dans Android?

J'ai aimé 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 est l'erreur que je fais ici?

132
Chatar Veer Suthar

Si le texte que vous mettez dans la variable TextView est court, il ne sera pas automatiquement étendu à quatre lignes. Si vous voulez que la TextView devienne toujours vous avez quatre lignes quelle que soit la longueur du texte qu'il contient, définissez 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>
181
Zarah

J'ai essayé de commenter l'une des réponses ci-dessus mais je n'ai pas assez de réputation.
Je pensais juste que j'ajouterais que si vous utilisez:

Android:inputType="textMultiLine" 

La vue cesse alors d'être cliquable. J'essayais d'obtenir des vues de texte multilignes dans mon menu de tiroirs de diapositives, ce qui doit évidemment répondre aux clics.

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

97
Ryan

Je n'aime aucune des réponses. Il suffit de définir le type d’entrée et le 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)

29
Maragues

Ajoutez juste 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
Pravin Bhosale

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"/> 
8
Naunidh Singh

Je n'aime pas la solution qui force le nombre de lignes dans la vue de 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 à faire en sorte que la vue texte apparaisse comme appropriée dans un tableau et que shrinkColumns soit la bonne directive à suivre pour obtenir ce que vous souhaitez.

5
Boris Strandjev

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 de sous-texte 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 :)

5
Khalil Meg

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

Android:inputType="textMultiLine"
4
Bhuvan Bhatt

Ce que j’ai appris, c’est d’ajouter "\ n" entre les mots pour lesquels vous souhaitez que le message passe à 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" />

Les\n entre 17h et By m'ont permis de mieux contrôler le point de départ et de fin de ma prochaine ligne.

2
Eduardo Lopez

Commencez par remplacer "\n" par sa Html equavalent "&lt;br&gt;" Puis appelez 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
Gulzar Bhat

J'ai utilisé: 

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

cela a fonctionné pour moi. 1 est le numéro de colonne.

1
Susana Mar Flores

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
Enakhi
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
Jitendra Nandiya