Android and displaying multi-lined text in a TextView in a TableRow

65,639

Solution 1

The TextView will wrap the text if the column it's in is set to shrink. Sometimes it does not wrap exactly, if the text ends with ", ...", then it is a little bit longer than exactly n lines.

Here's an example, the TextView with the id question will wrap:

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

Solution 2

For the sake of completeness, this is how my TableLayout reads in 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>

I later populate this with TableRows.

Solution 3

By code also works:

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

1 is the number of column.

Solution 4

Maybe try as follows:

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

I know, looks a bit like a "wheelchair" solution, but works for me, though I also fill a text programmatically.

Share:
65,639
Ken
Author by

Ken

Updated on July 09, 2022

Comments

  • Ken
    Ken almost 2 years

    I'm displaying a TableLayout with rows as follows:

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

    I'm hitting this with everything I can find here and can think of to permit the text to wrap on many lines but to no avail: The text is always forced to a single line, running off the screen. It might matter that I'm working inside a TableRow here, and so far as I can tell this hasn't been treated on this site.

    So, how do I force my second TextView to wrap to many lines?

  • Ken
    Ken about 13 years
    Thanks for this. I'll try this out in due course (I have a few things to take care of on this project) and hope to accept an answer.
  • Ken
    Ken about 13 years
    @All: android:shrinkColumns="0" works perfectly for me, rather than android:shrinkColumns="1"which I had been trying. I'm not sure if it's what you're suggesting, but your answer is solid and my comment appears here. Together they answered my question.
  • Ken
    Ken about 13 years
    @All: android:stretchColumns="0" is also useful/better, it seems, if (as in my case) the table only has one column which you want to stretch to fill the screen. My TableLayout XML is given in my answer on this page (below at the time of typing).
  • Michael Biermann
    Michael Biermann almost 13 years
    Yes you are absolutely right about the confusion about stretch/shrinkColumns="???". Most of the time I use android:shrinkColumns="*". For some very special cases I explicitly use the column number I want to be stretched/shrunken.
  • Ahmed Faisal
    Ahmed Faisal over 12 years
    Idk why but the android:stretchColumns didn't work for me. But the android:shrinkColumns works like a charm. Thank you for the answer & the supporting comments.
  • Malcolm
    Malcolm over 10 years
    @SK9 The answer is correct, but a little sloppy. The purpose here is to make the column with the text shrink, so the column's index should be set in that parameter. I've updated the answer, hope it's become clearer now.