我在Android中使用TableLayout。现在我有一个TableRow,里面有两个项目,在它下面是一个TableRow,它有一个项目。它呈现如下:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
---------------
我想要做的是让Cell 3延伸到两个上部单元格,所以看起来像这样:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
-----------------------------
在HTML中我会使用COLSPAN ....如何在Android中完成这项工作?
答案 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部分。