在 Android 中使用 TableLayout 時,常需讓多個 TextView 平均分配螢幕寬度,形成整齊的表格列。若直接在 XML 定義 TableRow 內的 TextView,預設為 wrap_content,導致列寬不一,影響版面美觀。
最簡單的方式是在 TableLayout 上設置 android:stretchColumns 屬性,指定需伸展的列索引(從 0 開始):
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="0,1" >
<TableRow
android:layout_width="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ok" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="bye" />
</TableRow>
</TableLayout>
stretchColumns="0,1" 表示第 1、2 列將自動展開填滿父容器寬度,兩個 TextView 便會平分空間。
若需在運行時動態添加行與列,可透過 TableRow.LayoutParams 控制權重:
TableLayout table = findViewById(R.id.tableLayout);
table.setStretchAllColumns(true); // 或 setStretchColumns(new int[]{0,1});
TableRow row = new TableRow(this);
row.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
String[] texts = {"Column A", "Column B"};
for (int i = 0; i < texts.length; i++) {
TextView tv = new TextView(this);
tv.setText(texts[i]);
tv.setGravity(Gravity.CENTER);
// 設置權重 1,實現等寬
TableRow.LayoutParams params = new TableRow.LayoutParams(
0, TableRow.LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);
row.addView(tv);
}
table.addView(row);
關鍵在於 LayoutParams 的構造函式 (width=0, height=WRAP_CONTENT, weight=1f),配合父 TableRow 的 MATCH_PARENT 寬度,即可達到均分效果。
layout_width(如 100dp)並不加入 stretchColumns。android:shrinkColumns 允許內容過長時自動縮小字體或換行。TableRow 不直接支援跨列,需嵌套另一個 TableLayout 或改用 GridLayout。無論靜態 XML 或動態代碼,核心原理都是利用 TableLayout 的伸展機制或 TableRow.LayoutParams 的權重屬性,讓子視圖在水平方向按比例分配空間。掌握這兩種方式,即可靈活構建響應式表格介面。