Set equal width of columns in table layout in Android [duplicate]
Asked Answered
S

2

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?

Seale answered 11/7, 2011 at 7:49 Comment(1)
W
221

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"
    >
Whirlpool answered 11/7, 2011 at 7:55 Comment(4)
Just a little note... I also had to add android:layout_weight="1" to the children of TableRows for it to work.Rigsdaler
stretchColumns should be "*", not 1 to have all columns be of equal width.Aloisius
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.Fid
@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 ?Pentavalent
P
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.

Peppie answered 11/7, 2011 at 8:1 Comment(5)
Its not working, if column1 is text is more, its expanding.Bob
Yep, this is not workingGunther
Just remove your android:stretchColumns="0" and add android:layout_weight="1" to all four and you get the desired output.Heparin
Don't forget to add android:layout_width="0dp", or weights won't be taken into account.Gilliette
thanks its working like charmReddish

© 2022 - 2024 — McMap. All rights reserved.