85

Possible Duplicate:
XML Table layout? Two EQUAL-width rows filled with equally width buttons?

I am using TableLayout to show list of data in 4 columns.

Problem description:

I am unable to set equal width of all 4 columns, which are in my TableLayout. I am putting my layout code, which I am using...

<TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="0">
        <TableRow>
            <TextView android:text="table header1" android:layout_width="wrap_content" android:layout_height="wrap_content" 
                 android:textSize="10dip" android:textStyle="bold"/>    
            <TextView android:text="table header2" android:layout_width="wrap_content" android:layout_height="wrap_content" 
                android:textSize="10dip" android:textStyle="bold"/> 
            <TextView android:text="table header3" android:layout_width="wrap_content" android:layout_height="wrap_content" 
                android:textSize="10dip" android:textStyle="bold"/> 
            <TextView android:text="table header4" android:layout_width="wrap_content" android:layout_height="wrap_content" 
                android:textSize="10dip" android:textStyle="bold"/>         
        </TableRow>
    </TableLayout>

How should I rewrite this layout to show 4 columns with equal sizes?

Community
  • 1
  • 1
Pankaj Kumar
  • 81,967
  • 29
  • 167
  • 186

2 Answers2

220

Try this.

It boils down to adding android:stretchColumns="*" to your TableLayout root and setting android:layout_width="0dp" to all the children in your TableRows.

<TableLayout
    android:stretchColumns="*"   // Optionally use numbered list "0,1,2,3,..."
>
    <TableRow
        android:layout_width="0dp"
    >
Mateen Ulhaq
  • 24,552
  • 19
  • 101
  • 135
Sherif elKhatib
  • 45,786
  • 16
  • 89
  • 106
  • 24
    Just a little note... I also had to add `android:layout_weight="1"` to the children of `TableRows` for it to work. – Asaf Dec 02 '13 at 10:13
  • 33
    stretchColumns should be "*", not 1 to have all columns be of equal width. – Yevgeniy May 02 '14 at 18:41
  • 6
    This solution works for me, but I was looking for at way to do it programmatically. I used `setStretchAllColumns(true)` on `TableLayout` and `setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT))` on each `TableRow` child. Setting weight didn't seem to be necessary. – Bjørn Stenfeldt Dec 30 '16 at 09:50
  • @Sherif elKhatib your solution works but when we set each column width by wrap_content. If the column data increased the column width will be increased as well and the columns will not be from the same size at this point. Do you have solution for this ? Can we set max_width for each column to be the equal desired width ? – user1510006 Aug 13 '17 at 08:48
77

Change android:stretchColumns value to *.

Value 0 means stretch the first column. Value 1 means stretch the second column and so on.

Value * means stretch all the columns.

thesquaregroot
  • 1,414
  • 1
  • 21
  • 35
iTurki
  • 16,292
  • 20
  • 87
  • 132