Android and displaying multi-lined text in a TextView in a TableRow
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 TableRow
s.
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.
Ken
Updated on July 09, 2022Comments
-
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 about 13 yearsThanks 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 about 13 years@All:
android:shrinkColumns="0"
works perfectly for me, rather thanandroid: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 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 almost 13 yearsYes 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 over 12 yearsIdk 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 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.