Изменение диапазона столбцов Android TableLayout

Итак, у меня есть TableLayout, объявленный в XML с двумя столбцами в первой строке и четырьмя столбцами во второй строке.

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

Теперь я хочу динамически изменить colspan второго столбца (столбец 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 тоже не помогает, но, как говорится в документе Android для TableRow.LayoutParams, ширина вообще не учитывается:

Этот набор параметров макета обеспечивает ширину каждого дочернего элемента равным MATCH_PARENT, а высоту каждого дочернего элемента — WRAP_CONTENT, но только в том случае, если высота не указана.

Есть ли способ добиться того, что я пытаюсь сделать с TableLayouts?

Спасибо


person particleflux    schedule 08.01.2014    source источник


Ответы (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);
person particleflux    schedule 09.01.2014