所以我在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?
由于
答案 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);