所以我有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
有没有办法阻止这种情况发生?
答案 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}}的任何时间点。
我没有测试过这个确切的代码块,但我在我的一个项目中进行了非常类似的操作,所以希望这对你有用。