【问题标题】:Changing Android TableLayout column span更改 Android TableLayout 列跨度
【发布时间】:2014-01-08 19:17:30
【问题描述】:

所以我在 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 做的事情?

谢谢

【问题讨论】:

    标签: java android android-layout android-tablelayout


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      相关资源
      最近更新 更多