首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TableLayout 動態設置列寬與伸展的完整指南

     編輯:程式設計綜合問答

需求場景

在 Android 中使用 TableLayout 時,常需讓多個 TextView 平均分配螢幕寬度,形成整齊的表格列。若直接在 XML 定義 TableRow 內的 TextView,預設為 wrap_content,導致列寬不一,影響版面美觀。

XML 靜態佈局實現

最簡單的方式是在 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 便會平分空間。

Java/Kotlin 動態代碼實現

若需在運行時動態添加行與列,可透過 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 的權重屬性,讓子視圖在水平方向按比例分配空間。掌握這兩種方式,即可靈活構建響應式表格介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved