Android TableLayout中“colspan”的等价物是什么?

时间:2010-04-26 02:24:06

标签: android android-layout android-tablelayout

我在Android中使用TableLayout。现在我有一个TableRow,里面有两个项目,在它下面是一个TableRow,它有一个项目。它呈现如下:

-----------------------------
|   Cell 1    |  Cell 2     |
-----------------------------
|   Cell 3    |
---------------

我想要做的是让Cell 3延伸到两个上部单元格,所以看起来像这样:

-----------------------------
|   Cell 1    |  Cell 2     |
-----------------------------
|           Cell 3          |
-----------------------------

在HTML中我会使用COLSPAN ....如何在Android中完成这项工作?

8 个答案:

答案 0 :(得分:187)

似乎有一个属性在做: layout_span

更新: 必须将此属性应用于TableRow的子项。不是TableRow本身。

答案 1 :(得分:87)

要完成答案,必须将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>

答案 2 :(得分:33)

这就是您以编程方式执行的操作

//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);

答案 3 :(得分:25)

您必须使用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>

答案 4 :(得分:5)

也许这会对某人有所帮助。我用layout_span尝试了解决方案,但这对我不起作用。所以我用这个技巧解决了这个问题。只需使用LinearLayout代替您需要colspan的TableRow,就是这样。

答案 5 :(得分:3)

在TableRow元素的子元素中使用android:layout_span

答案 6 :(得分:1)

在使用TableRow,Textview等生成代码时,我遇到了一些rowpan问题。即使Onimush的答案似乎很好,它也不适用于生成的UI。

这是一段......不起作用的代码:

            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”的init时,它返回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);

唯一的区别是我在设置span之前将Textview推入TableRow。在这种情况下,它的工作原理。 希望这会对某人有所帮助!

答案 7 :(得分:0)

我认为你需要围绕另一个布局。 有一个布局列表垂直,里面有另一个(或在这种情况下,两个)水平列表。

我仍然觉得很难将界面很好地拆分为Android中的50-50部分。