Установите равную ширину столбцов в макете таблицы в Android

Возможный дубликат:
Макет таблицы XML? Две строки РАВНОЙ ширины, заполненные кнопками одинаковой ширины?

Я использую TableLayout для отображения списка данных в 4 столбцах.

Описание проблемы:

Я не могу установить равную ширину всех 4 столбцов, которые находятся в моем TableLayout. Я помещаю свой код макета, который я использую...

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

Как мне переписать этот макет, чтобы отображались 4 столбца одинакового размера?


person Pankaj Kumar    schedule 11.07.2011    source источник
comment
stackoverflow.com/q/2865497/778427   -  person Glendon Trullinger    schedule 11.07.2011


Ответы (2)


Попробуйте это.

Это сводится к добавлению android:stretchColumns="*" к вашему корню TableLayout и установке android:layout_width="0dp" для всех дочерних элементов в ваших TableRow.

<TableLayout
    android:stretchColumns="*"   // Optionally use numbered list "0,1,2,3,..."
>
    <TableRow
        android:layout_width="0dp"
    >
person Sherif elKhatib    schedule 11.07.2011
comment
Небольшое примечание... Мне также пришлось добавить android:layout_weight="1" к дочерним элементам TableRows, чтобы это заработало. - person Asaf; 02.12.2013
comment
stretchColumns должен быть *, а не 1, чтобы все столбцы были одинаковой ширины. - person Yevgeniy; 02.05.2014
comment
Это решение работает для меня, но я искал способ сделать это программно. Я использовал setStretchAllColumns(true) для TableLayout и setLayoutParams(new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT)) для каждого TableRow ребенка. Установка веса не казалась необходимой. - person Bjørn Stenfeldt; 30.12.2016
comment
@Sherif elKhatib ваше решение работает, но когда мы устанавливаем ширину каждого столбца с помощью wrap_content. Если данные столбца увеличились, ширина столбца также будет увеличена, и в этот момент столбцы не будут иметь одинаковый размер. У вас есть решение для этого? Можем ли мы установить max_width для каждого столбца равной желаемой ширине? - person user1510006; 13.08.2017

Измените значение android:stretchColumns на *.

Значение 0 означает растяжение первого столбца. Значение 1 означает растяжение второго столбца и так далее.

Значение * означает растяжение всех столбцов.

person iTurki    schedule 11.07.2011
comment
Это не работает, если столбец 1 больше текста, он расширяется. - person Palani; 08.12.2011
comment
Ага, это не работает - person Ted; 11.02.2013
comment
Просто удалите свой android:stretchColumns=0 и добавьте android:layout_weight=1 ко всем четырем, и вы получите желаемый результат. - person user2779311; 04.07.2014
comment
Не забудьте добавить android:layout_width=0dp, иначе вес не будет учитываться. - person Damian Walczak; 25.08.2014
comment
спасибо, это работает как шарм - person Surya Reddy; 09.07.2019