如何在删除视图时阻止GridLayout推送

时间:2015-04-17 19:31:39

标签: android android-gridlayout

所以我有GridLayout(添加View时我不会使用params),每当我删除直接在布局中的View时,它就会删除它并且推进所有内容,所以当我尝试添加另一个View时,它会附加它,而不是将其添加到我想要的位置。

即:

0 0 0 0 0 0 1 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

我想删除1,然后添加2.现在它

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 2

有没有办法阻止这种情况发生?

3 个答案:

答案 0 :(得分:0)

addview始终将新元素放在ViewGroup的末尾。

您可以先以编程方式将mxn RelativeLatouts(或另一个ViewGroup)添加到GridLayout,然后从这些布局中删除Views而不是GridLayout

答案 1 :(得分:0)

使用addView(View child, int index),并传递新视图和索引。

答案 2 :(得分:0)

您是如何删除子视图的?一种选择是这样的:

int index= yourIndex;
View newChild = (View) findViewById(R.id.childTwo);
GridLayout parent = (GridLayout) findViewById(R.id.parentId;
View child = (View) parent.getChildAt(index);
child.setVisibility(View.INVISIBLE);
parent.addView(newChild, index);
parent.removeView(child);

执行此操作会使占位符保留在您希望新View占用的GridLayout单元格中,但只有在删除现有View后立即添加新View或者你不介意在你的GridLayout中有一个“空”的单元格,直到你向它添加新的{{1}}的任何时间点。

我没有测试过这个确切的代码块,但我在我的一个项目中进行了非常类似的操作,所以希望这对你有用。