说明:表格布局采用常见的表格方式来表示布局,与上文中提到的android:weight属性显示出来的效果有些相似。而事实上,TableLayout的确是LinearLayout的子类,因此本质上还是线性布局。实际开发中,我们经常会采用adnroid:weight属性来代替表格布局。
跟在html中写表格有点类似,在TableLayout中,我们可以通过TableRow标签来为表格添加一个新的行。与html不同的是,只要包裹在TableLayout中,一个组件也可以成为一个新的行,如:
<TableLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableLayout>
上面的代码会绘制出一个占据了整个父容器宽度的Button组件。
TableLayout中的列是由列数最大的行决定的,比如:一个TabLeLayout有两行,第一行有三列,第二行有五列,那么这个表格的就是3*5的。每列的最大宽度,同样由最宽的列来决定。
在表格布局中,我们需要关注的属性有三个,都是对单元格进行设置的属性:
1 android:shrinkColumns
对应方法:setShrinkAllColumns(boolean)
说明:用来设置被允许收缩的列,多个列号之间可以用“,”隔开。
这里所谓的收缩就是当单元格中的内容(比如文字)超过了单元格的宽度,可以通过换行来收缩其实际长度,以满足所有单元格不超出父容器的宽度。
2 android:stretchColumns
对应方法:setStretchAllCoulums(boolean)
说明:用来设置允许被拉伸的列,多个列号之间可以用“,”隔开。
比如说如果所有的列加起来都没有填充满父容器的宽度,就一可以通过将设置了该属性的单元格进行拉伸,来填满父容器。
3 android:collapseColumns
对应方法:setCollapseColumns(int,boolean)
说明:设置需要被隐藏的列,多个列号之间可以用“,”隔开。
被设置的列中所有行的单元格都会被隐藏。
注意:这里说的列号是从0开始的。
下面是demo和实际效果。
<TableLayout android:shrinkColumns="1" android:stretchColumns="2" android:collapseColumns="3" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 第一行,一个Button独自占满了父组件 --> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 用TableRow开辟新的行 --> <TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Hello" /> <!-- 被收缩的列,多出来的文字会出现在下一行 --> <Button android:text="Hello world! My name is LemonDoor." android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 被拉伸的列,如果所有组件宽度小于父容器宽度,就会自动拉伸填满 --> <Button android:text="world" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 被隐藏的列 --> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAllCaps="false" android:text="You can't find me!" /> </TableRow> <TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Hello" /> <Button android:text="Hello world! My name is LemonDoor." android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:text="world" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> </TableLayout>
收缩效果:
第二列中多出来的文字被挤到了下一行。
拉伸效果:
当所有单元格的宽度和小于父容器宽度,被拉伸列就会自动拉伸到填满父容器。
表格列数是由列数最多的行决定的:
附:引用声明
《疯狂Android讲义(第二版)》 李刚 《2.2.2 表格布局》 电子工业出版社