Android开发:TableLayout首行列无法铺满,如何实现列拉伸?
Android TableLayout 第一行列宽问题解决
问题描述
我想让TableLayout的第一行仅包含一列且铺满整个宽度,但目前第一行的列宽被第二行第一列的宽度限制,达不到预期效果。后续多行的多列表现正常,已尝试多种组合仍未解决。
布局代码
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="horizontal" android:stretchColumns="*" tools:context=".MainActivity"> <TableRow android:id="@+id/firstRow"> <TextView android:layout_width="match_parent" android:layout_height="120dp" android:gravity="center_horizontal|center_vertical" android:text="2.07" android:padding="5dp" android:textSize="96sp" /> </TableRow> <TableRow> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:padding="5dp" android:text="Copy" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:padding="5dp" android:text="Cancel" /> <TextView android:id="@+id/text3" android:layout_width="wrap_content" android:padding="5dp" android:text="Delete" /> <TextView android:id="@+id/text7" android:layout_width="wrap_content" android:padding="5dp" android:text="Save" /> </TableRow> <TableRow> <TextView android:id="@+id/text4" android:layout_width="wrap_content" android:padding="5dp" android:text="Copy" /> <TextView android:id="@+id/text5" android:layout_width="wrap_content" android:padding="5dp" android:text="Cancel" /> <TextView android:id="@+id/text6" android:layout_width="wrap_content" android:padding="5dp" android:text="Delete" /> <TextView android:id="@+id/text8" android:layout_width="wrap_content" android:padding="5dp" android:text="Save" /> </TableRow> </TableLayout>
当前布局效果

解决方案
给第一行的TextView添加android:layout_span="4"属性,让它跨占所有4列(因为后续每行都有4列),这样就能铺满整个TableLayout的宽度。修改后的第一行代码如下:
<TableRow android:id="@+id/firstRow"> <TextView android:layout_width="match_parent" android:layout_height="120dp" android:gravity="center_horizontal|center_vertical" android:text="2.07" android:padding="5dp" android:textSize="96sp" android:layout_span="4" /> <!-- 添加这一行 --> </TableRow>
原理说明
TableLayout的列数由布局中列数最多的行决定,你后续每行有4列,第一行默认只占1列,所以它的宽度会被第二行的第一列宽度限制。通过layout_span属性指定该TextView跨越4列,就能让它占据整个行的宽度。
内容的提问来源于stack exchange,提问作者MikkoR
相关产品推荐
相关产品推荐

