Ответ 1
Кажется, что есть атрибут: layout_span
UPDATE: Этот атрибут должен применяться к дочерним элементам TableRow. НЕ к самому TableRow.
Я использую TableLayout в Android. Прямо сейчас у меня есть один TableRow с двумя элементами в нем, а ниже - TableRow с одним его элементом. Он делает следующее:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
---------------
Что я хочу сделать, так это сделать ячейку 3 растянутой по обеим верхним ячейкам, чтобы она выглядела так:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
-----------------------------
В HTML я бы использовал COLSPAN... как это сделать в Android?
Кажется, что есть атрибут: layout_span
UPDATE: Этот атрибут должен применяться к дочерним элементам TableRow. НЕ к самому TableRow.
Чтобы завершить ответ, атрибут layout_span должен быть добавлен к дочернему элементу, а не к TableRow.
Этот фрагмент показывает третью строку моей таблицыLayout, которая охватывает 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, что все.
использовать android: layout_span в дочернем элементе элемента TableRow
Я думаю, вам нужно обернуть макет вокруг другого. Имейте один список макетов по вертикали, внутри есть другой (или в этом случае два) списка по горизонтали.
Мне все еще сложно разделить интерфейс на 50-50 частей в Android.
У меня была проблема с 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 перед установкой диапазона. И в этом случае он работает. Надеюсь, это поможет кому-то!