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

我在 Android 中使用 TableLayout。现在我有一个 TableRow,其中包含两个项目,在它下面是一个 TableRow,其中包含一个项目。它的效果是这样的:

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

我想要做的是让细胞3在两个上层细胞上延伸,看起来像这样:

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

在 HTML 中我会使用一个 COLSPAN... ... 我如何在 Android 中实现这一点?

99117 次浏览

我觉得你应该再设计一个。 有一个垂直布局列表,内部有另一个(或在这种情况下,两个)水平列表。

我仍然发现在 Android 中很难很好地将界面分割为50-50部分。

似乎有一个属性可以做到这一点: Layout _ span

更新: 此属性必须应用于 TableRow 的子级。

要完成这个问题的答案,必须向子级(而不是 TableRow)添加 outs _ span 属性。

此代码片段显示了 tableLayout 的第三行,其中包含两列。

<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_span的解决方案,但这不适合我。所以我用这个把戏解决了问题。只要用 LinearLayout代替 TableRow就可以了。

在 TableRow 元素的子元素中使用 android: lay _ span

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

我在 rowspan 方面遇到了一些问题,例如 TableRow、 Textview 等,都是用代码生成的。即使 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 中。在这种情况下,它工作。 希望这对谁有帮助!

实际上,这很简单,这是我的程序化解决方案

        TableLayout tableLayout = binding.tableLayout;
TableRow row = new TableRow(this);
TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
layoutParams.span = 4;               // define no. of column span will row do
row.setLayoutParams(layoutParams);


TextView noDataTextView = new TextView(this);
noDataTextView.setText("No Data");
noDataTextView.setGravity(Gravity.CENTER);
noDataTextView.setLayoutParams(layoutParams);   //This line will span your row


row.addView(noDataTextView);
tableLayout.addView(row, 1);