说明:表格布局采用常见的表格方式来表示布局,与上文中提到的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 表格布局》 电子工业出版社