GridLayout for循环修改子控件layoutParams只保留了最后一次
时间: 2024-03-01 09:55:25 浏览: 135
这个问题的原因是在循环中重复使用同一个 LayoutParams 对象,并且每次都修改了它的值,而实际上 GridLayout 会对 LayoutParams 对象进行复用,从而导致修改结果只保留了最后一次的修改。
为了解决这个问题,我们需要在循环中为每个子 View 创建一个新的 LayoutParams 对象,并设置对应的布局参数。下面是一种可能的解决方案:
```java
// 获取 GridLayout 控件
GridLayout gridLayout = findViewById(R.id.grid_layout);
// 定义每个子 View 的宽度和高度
int childWidth = 100;
int childHeight = 100;
for (int i = 0; i < 10; i++) {
// 创建一个新的 LayoutParams 对象
GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
// 设置子 View 的宽度和高度
layoutParams.width = childWidth;
layoutParams.height = childHeight;
// 设置子 View 在 GridLayout 中的行列位置
layoutParams.rowSpec = GridLayout.spec(i / 3);
layoutParams.columnSpec = GridLayout.spec(i % 3);
// 创建一个新的子 View
View childView = new View(this);
// 设置子 View 的背景色
childView.setBackgroundColor(Color.RED);
// 将子 View 添加到 GridLayout 中,同时将对应的 LayoutParams 对象设置给子 View
gridLayout.addView(childView, layoutParams);
}
```
在上面的代码中,我们在每次循环中都创建了一个新的 LayoutParams 对象,并将其设置给新创建的子 View。这样可以避免修改缓存中的 LayoutParams 对象,从而保证每次修改都会生效。同时,我们还设置了子 View 的宽度、高度和在 GridLayout 中的行列位置,以及背景色等属性。
阅读全文