Android UI之TableLayout(表格布局)

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。