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

How to stop GridLayout from pushing things up when a view is removed

所以我有 GridLayout(添加 View 时我不会弄乱参数),每当我删除直接位于布局内部的 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

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

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

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

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

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

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 中有一个看起来 "empty" 的单元格,直到您向其中添加新的 View 的任何时间点。

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