占两格的Gridlayout子控件里面的控件动态改变了shape颜色并设置背景,切换页面之后背景只设置了一格
时间: 2024-02-07 18:03:30 浏览: 71
这个问题可能是由于动态设置背景后,占两格的Gridlayout子控件的大小发生了变化,但是父控件没有及时更新子控件的大小和位置所导致的。你可以尝试在改变背景颜色后,调用Gridlayout子控件的`invalidate()`方法和`requestLayout()`方法,强制让其重新绘制和计算布局参数并更新显示。如果问题仍然存在,可以提供更多的代码和具体的场景描述,以便更好地帮助你解决问题。
另外,如果子控件占用了两格,那么你在设置背景时需要确保背景的大小和位置与子控件的大小和位置一致。可以通过设置背景的大小和padding来实现。
示例代码如下:
```java
// 获取子控件
View child = gridLayout.getChildAt(index);
// 动态改变shape颜色
GradientDrawable drawable = (GradientDrawable) child.getBackground();
drawable.setColor(getResources().getColor(R.color.colorAccent));
// 设置背景的大小和padding
int size = getResources().getDimensionPixelSize(R.dimen.grid_item_size);
int padding = getResources().getDimensionPixelSize(R.dimen.grid_item_padding);
drawable.setSize(size * 2, size);
child.setPadding(padding, padding, padding, padding);
// 更新子控件的背景并强制重新绘制和计算布局参数
child.setBackground(drawable);
child.invalidate();
child.requestLayout();
```
其中,`index`是Gridlayout子控件的索引,`R.color.colorAccent`是你要设置的颜色资源ID,`R.dimen.grid_item_size`和`R.dimen.grid_item_padding`是你定义的子控件大小和padding的尺寸资源ID。
注意,在使用`invalidate()`方法和`requestLayout()`方法之前,需先调用`setBackground()`方法,将新的背景设置到子控件上。
如果你还有其他问题或者需要更详细的帮助,请提供更多的信息和代码,让我更好地理解你的问题。
阅读全文