Что такое эквивалент "colspan" в Android TableLayout?
Я использую TableLayout в Android. Прямо сейчас у меня есть один TableRow с двумя элементами в нем, и, ниже этого, TableRow с одним элементом it it. Это делает так:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
---------------
то, что я хочу сделать, это сделать ячейку 3 растянуть через обе верхние ячейки, так что это выглядит так:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
-----------------------------
в HTML я бы использовал COLSPAN.... как мне сделать эту работу в Android?
8 ответов:
кажется, что есть атрибут делает это : layout_span
обновление: Этот атрибут должен быть применен к детям TableRow. Только не к самому столу.
просто для завершения ответа атрибут layout_span должен быть добавлен к дочернему элементу, а не к TableRow.
этот фрагмент показывает третью строку моего tableLayout, которая охватывает 2 столбца.
<TableLayout> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="2" android:text="@string/create" /> </TableRow> </TableLayout>
и вот как вы это делаете программно
//theChild in this case is the child of TableRow TableRow.LayoutParams params = (TableRow.LayoutParams) theChild.getLayoutParams(); params.span = 2; //amount of columns you will span theChild.setLayoutParams(params);
вы должны использовать layout_weight, чтобы заполнить всю строку, в противном случае он по-прежнему заполняет левую или правую колонку табличной верстки.
<TableRow android:id="@+id/tableRow1" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="2" android:layout_weight="1" android:text="ClickMe" /> </TableRow>
может быть, это поможет кому-то. Я попробовал решение с
layout_span
но это не работает для меня. Поэтому я решил проблему с этим трюком. Просто используйтеLinearLayout
на местеTableRow
где вам нужен colspan, вот и все.
у меня были некоторые проблемы с rowspan, в случае TableRow, Textview и так далее, генерируемые с помощью кода. Даже если ответ Onimush кажется хорошим, он не работает с сгенерированным пользовательским интерфейсом.
вот кусок кода, который.... не работает:
TableRow the_ligne_unidade = new TableRow(this); the_ligne_unidade.setBackgroundColor(the_grey); TextView my_unidade = new TextView(this); my_unidade.setText(tsap_unidade_nom); my_unidade.setTextSize(20); my_unidade.setTypeface(null, Typeface.BOLD); my_unidade.setVisibility(View.VISIBLE); TableRow.LayoutParams the_param; the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams(); the_param.span = 3; my_unidade.setLayoutParams(the_param); // Put the TextView in the TableRow the_ligne_unidade.addView(my_unidade);
код, кажется, в порядке, но, когда вы достигнете инициализации "the_params" он возвращает NULL.
С другой стороны, этот код работает как шарм:
TableRow the_ligne_unidade = new TableRow(this); the_ligne_unidade.setBackgroundColor(the_grey); TextView my_unidade = new TextView(this); my_unidade.setText(tsap_unidade_nom); my_unidade.setTextSize(20); my_unidade.setTypeface(null, Typeface.BOLD); my_unidade.setVisibility(View.VISIBLE); // Put the TextView in the TableRow the_ligne_unidade.addView(my_unidade); // And now, we change the SPAN TableRow.LayoutParams the_param; the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams(); the_param.span = 3; my_unidade.setLayoutParams(the_param);
единственная разница в том, что я нажимаю Textview внутри TableRow перед установкой пяди. И в данном случае это работает. Надеюсь, это поможет кому-то!