![Android开发实战:从学习到产品](https://wfqqreader-1252317822.image.myqcloud.com/cover/688/920688/b_920688.jpg)
3.3 TableLayout:表格布局管理器
表格布局管理器继承自LinearLayout线性布局管理器,用行、列方式来管理容器内的控件,表格布局不需要指定多少行列,布局内每添加一行TableRow表示添加一行,然后在TableRow添加子控件,容器的列数由包含列数最多的行决定。
3.3.1 TableLayout实例与属性详解
TableLayout布局文件实例:
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P66_128673.jpg?sign=1739265344-FcK165N1WdA6xcTxf6T8J4eaEKK1ECgX-0-10929a5fc748eb296d73e95f8037552f)
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P67_128675.jpg?sign=1739265344-EsxA9ss64JX8iJtlQ0OikyNa46iaWMJW-0-7dbedace37c957b9b0220e5473cfd4e5)
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P67_68507.jpg?sign=1739265344-NrvVvz0cA2R1CeJmkLA1QXLvlEXSkyOc-0-196376bcf80dcab9ef2fabc6482a4fdf)
图3-5 表格布局效果图
程序中定义了一个4行2列的表格,运行效果如图3-5所示。
从上述TableLayout布局文件实例中可以清晰地看出,TableLayout内部的子元素是按照表格来布局的,效果也达到了我们的预期。第2行只设置了一列,则只显示一列,第3行设置了1列,指定为第2列,第4行设置了一列内容,指定占据两列的控件,这些都正确无误地实现了,说明这些属性是可以起作用的。下面我们就布局文件中包含的一些常用属性做一些分析:
• android:collapseColumns 指定某一列不显示。
• android:layout_width 设置当前组件的宽度,match_parent表示充满整个父元素,若使用wrap_content则意味着组件多大就多大。
• android:layout_height 设置当前组件的高度,match_parent表示充满整个父元素,若使用wrap_content则意味着组件多大就多大。
• android:visibility 默认为visibility,表示显示;设置为invisibility不显示,但是还要占据位置,留一个空白区域;设置成gone表示真正的完全隐藏。
• android:stretchColumns 为TableLayout容器设置属性,表示被设置的这些列可拉伸(注意:TableLayout中列的索引从0开始)。
• android:shrinkColumns 为TableLayout容器设置属性,表示被设置的这些列可收缩。
• android:layout_column 为容器里面的控件设置属性,指定控件在TableRow中指定列。
• android:layout_span 为容器里面的控件设置属性,指定控件在TableRow中的指定列的数量。
3.3.2 使用代码控制表格布局管理器
TableLayout是LinearLayout类的子类。与LinearLayout一样,TableLayout也可以用Java代码来动态生成、控制布局管理器。与线性布局管理器类似,Android提供了Android.widget. TableLayout和Android.widget.TableRow两个布局管理类,以及Android.widget.TableLayout. LayoutParams和Android.widget.TableRow.LayoutParams两个布局参数类来实现Java代码操作布局管理器。
通过代码生成、控制布局管理器的代码实例如下:
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P68_128679.jpg?sign=1739265344-bwuMNZYwYl2QcOWXgh5hmxVI1KfPRaXB-0-636b7384d846b3ad91df41ac4a6a2f6b)
![](https://epubservercos.yuewen.com/065DC9/10080940803417301/epubprivate/OEBPS/Images/Figure-P69_68788.jpg?sign=1739265344-I56Mq8n07VkTImRR0uuBo65SwmeSZvno-0-eaab999b3fe5e109168eedbcbed69227)
图3-6 代码控制表格布局效果图
这个程序通过Java代码动态生成表格布局管理器,并通过循环方式生成TableRow和TextView ,最终又通过addContentView方法使布局管理器在这个Activity中展示出来。程序实现的效果如图3-6所示。