51 votes

Android et affichage de texte multiligne dans un TextView dans un TableRow

J'affiche un TableLayout avec les lignes suivantes :

<?xml version="1.0" encoding="utf-8"?>
<TableRow
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

        <TextView   
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/one"
            android:layout_marginLeft="10dip"
            android:textColor="#B0171F" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/one"
            android:id="@+id/two"
            android:layout_marginLeft="10dip"
            android:ellipsize="none"
            android:singleLine="false"
            android:scrollHorizontally="false"
            android:maxLines="10"
            android:textColor="@android:color/black" />

  </RelativeLayout>

</TableRow>

J'utilise tout ce que je peux trouver ici et ce à quoi je peux penser pour permettre au texte de s'étendre sur plusieurs lignes, mais en vain : Le texte est toujours contraint à une seule ligne, débordant de l'écran. Il se peut que je travaille à l'intérieur d'un TableRow, et pour autant que je sache, ce problème n'a jamais été traité sur ce site.

Alors, comment puis-je forcer mon deuxième TextView à s'étendre sur plusieurs lignes ?

0 votes

Une TableRow n'est rien d'autre qu'une rangée. Je ne pense pas que vous soyez censé essayer de créer plusieurs lignes sur une seule ligne, c'est un peu le but. Quel est le but de l'utilisation de TableRow ici ?

0 votes

Avez-vous essayé de retirer le android:singleLine="false" ligne ?

0 votes

Je viens de copier votre code dans Eclipse, et le texte s'enroule correctement, comme je peux le voir dans la présentation graphique. (Je viens d'ajouter android:text="(a long text) " pour avoir du texte à afficher)

99voto

Michael Biermann Points 1461

Le TextView enveloppera le texte si la colonne dans laquelle il se trouve est définie comme étant rétrécie. Parfois, il ne s'enroule pas exactement, si le texte se termine par ", ...", alors il est un peu plus long que n lignes exactement.

Voici un exemple, le TextView avec l'id question sera emballé :

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:shrinkColumns="*">
    <TableRow>
         <TextView
             android:id="@+id/question"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
    </TableRow>
</TableLayout>

0 votes

Merci pour cela. J'essaierai cela en temps voulu (j'ai quelques choses à régler sur ce projet) et j'espère recevoir une réponse.

12 votes

Tout : android:shrinkColumns="0" fonctionne parfaitement pour moi, plutôt que android:shrinkColumns="1" que j'avais essayé. Je ne sais pas si c'est ce que vous suggérez, mais votre réponse est solide et mon commentaire apparaît ici. Ensemble, ils ont répondu à ma question.

0 votes

@All : Android:stretchColumns="0" est également utile/meilleur, il semble, si (comme dans mon cas) le tableau n'a qu'une seule colonne que vous voulez étirer pour remplir l'écran. Mon TableLayout XML est donné dans ma réponse sur cette page (ci-dessous au moment de la saisie).

15voto

SK9 Points 9683

Par souci d'exhaustivité, voici comment ma TableLayout lit en XML :

<TableLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="10dp"
  android:shrinkColumns="0"
  android:stretchColumns="0"
  android:id="@+id/summaryTable">
</TableLayout>

Je le remplirai ensuite avec TableRow s.

3voto

Susana Mar Flores Points 367

Par code, cela fonctionne aussi :

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

1 est le numéro de la colonne.

2voto

87element Points 691

Essayez peut-être comme suit :

myTextView.setText(Html.fromHtml("On " + stringData1 + "<br> at " + strinData2);

Je sais, ça ressemble un peu à une solution "fauteuil roulant", mais ça marche pour moi, bien que je remplisse aussi un texte par programme.

0voto

Vous pouvez également utiliser le code suivant

<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"
        android:padding="8dp"
        android:text="The food test was very good."
        android:textColor="@color/black"
        android:textColorHint="@color/hint_text_color" />
</TableRow>

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