2014-01-08 72 views
1

因此,我有一个TableLayout在XML中声明,第一行中有2列,第二行中有4列。更改Android TableLayout列范围

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

现在我想要动态地改变所述第二列的列跨度(山口。B)在第一行中以跨越而不是两个整个4列,并且所述第一柱(柱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

现在知道了,隐藏“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);