更改Android TableLayout列范围

时间:2014-01-08 19:17:31

标签: java android android-layout android-tablelayout

所以我在XML中声明了一个TableLayout,第一行有2列,第二行有4列。

 --------- ---------
|         |         |
|    A    |    B    |
|         |         |
 --------- ---------
|    |    |    |    |
|    |    |    |    |
 --------- ---------

现在我想动态更改第一行中第二列(col.B)的colspan以跨越整个4列而不是两列,并且第一列(col A)将消失,并且能够切换回双列状态。表格布局的第二个状态就是这样:

 -------------------
|                   |
|         B         |
|                   |
 --------- ---------
|    |    |    |    |
|    |    |    |    |
 --------- ---------

最初,A和B都是用XML创建的,加载后调整大小并添加了边距:

TableRow.LayoutParams bLp = new TableRow.LayoutParams(size, size);
bLp.setMargins(margin, 0, 0, margin);
bLp.span = 2;
b.setLayoutParams(bLp);

但是,如果我尝试更改第二列的范围并隐藏第一列,唯一改变的是第二列向左滑动

a.setVisibility(View.GONE);
TableRow.LayoutParams bLp = (TableRow.LayoutParams) b.getLayoutParams();
bLp.span = 4;
b.setLayoutParams(bLp);

将第二列的宽度更改为MATCH_PARENT也无济于事,但正如TableRow.LayoutParams的Android文档所述,宽度不会被考虑在内:

  

这组布局参数强制每个子节点的宽度为MATCH_PARENT,每个子节点的高度为WRAP_CONTENT,但前提是未指定高度。

有没有办法实现我正在尝试使用TableLayouts?

由于

1 个答案:

答案 0 :(得分:1)

现在知道了,当隐藏'A'列时,我需要将其跨度设置为0,另外将B的跨度设置为4,所以整个代码将是:

TableRow.LayoutParams aLp = (TableRow.LayoutParams) a.getLayoutParams();
aLp.span = 0;
a.setLayoutParams(aLp);    

a.setVisibility(View.GONE);    

TableRow.LayoutParams bLp = (TableRow.LayoutParams) b.getLayoutParams();
bLp.span = 4;
b.setLayoutParams(bLp);