GridLayout: GridLayout中Spec属性

如果想要让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); 关于weight属性的理解可参考:https://www.cnblogs.com/yongdaimi/p/11821616.html

参考链接:

1. GridLayout使用总结

2. GridLayout 平均分配

 

posted @ 2019-11-08 16:46  夜行过客  阅读(3989)  评论(0编辑  收藏  举报