如果想要让GridLayout中的子元素能够平均分配,就需要用到
android:layout_columnWeight="1"
android:layout_rowWeight="1"
该属性在API21 (android5.0)时引入,如果要实现全部平均效果,可以在给子元素指定LayoutParams里,指定:
params.columnSpec=GridLayout.spec(GridLayout.UNDEFINED, 1f);
PS: GridLayout.UNDEFINED 代表不指定列的位置。
则效果如下(循环添加20个按钮):
如果想对某一个位置的子元素做出修改,则可以单独指定该元素的Spec, 如要实现下列的效果:
其中的第一个元素,位置在(0,0),它的Spec就可以这样写:
params.rowSpec = GridLayout.spec(0,1,3f); // 第一个0代表第0行 // 第二个1代表占了多少行 // 第三个3f代表权重是多少 params.columnSpec = GridLayout.spec(0,4,1f); // 第一个0代表第0列 // 第二个4代表占了多少列 // 第三个1f代表权重是多少
注意:
GridLayout.spec(); 这个方法是一个重点,需要好好看一下,而且由于它有几个重载方法,使用时也要注意。比如说下面两个方法:
public static Spec spec(int start, int size) public static Spec spec(int start, float weight)
所以,如果调用的是第二个方法,一定要注意float参数的表示方法,加个f,如:GridLayout.spec(0,1f);
参考链接: