Что такое эквивалент "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 125

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, вот и все.

используйте android: layout_span в дочернем элементе элемента TableRow

у меня были некоторые проблемы с 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 перед установкой пяди. И в данном случае это работает. Надеюсь, это поможет кому-то!

Я думаю, что вам нужно обернуть макет вокруг другого. Имейте один список компоновки вертикально, внутри есть еще один (или в этом случае два) списка по горизонтали.

Мне все еще трудно красиво разделить интерфейс на 50-50 частей в Android.