0

我需要一个 TableLayout 来匹配它的父 LinearLayout 的宽度,但我无法让它工作。

在下面的第一个屏幕截图中,“短标题”是垂直线性布局中的第一个视图。下面的“字段”是 TableLayout 的成员,它是垂直 LinearLayout 中的第二个视图。

当“标题”文本不需要与 TableLayout 一样多的宽度时,所有内容都会按预期对齐。

当“Header”需要比 TableLayout 更大的宽度时,TableLayout 与“Header”的宽度不匹配,如您在第二个屏幕截图中所见。

如何使 TableLayout 与 LinearLayout 的宽度相匹配?

注意:基本 LinearLayout 需要“换行”到显示其内容所需的最小宽度,因此设置固定宽度不是解决方案

短标题

长标题

此测试的布局 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout 
       android:id="@+id/baseLinerLayout"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:orientation="vertical"
       android:background="#FFAAAAAA" >

       <TextView
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:padding="10dp"
           android:background="#FF000000"
           android:textColor="#FFFFFFFF"
           android:text="Long header to make base layout wider than table layout" />

          <TableLayout 
            android:id="@+id/tableLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#33FFFFFF" >

            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:gravity="center"
                    android:padding="10dp"
                    android:background="#44FFFFFF"
                    android:textColor="#FF000000"
                    android:text="Field (0,0)" />

                <TextView
                    android:gravity="center"
                    android:padding="10dp"
                    android:background="#88FFFFFF"
                    android:textColor="#FF000000"
                    android:text="Field (0,1)" />

            </TableRow>

            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:gravity="center"
                    android:padding="10dp"
                    android:background="#88FFFFFF"
                    android:textColor="#FF000000"
                    android:text="Field (0,1)" />

            </TableRow>
        </TableLayout>
   </LinearLayout>
</RelativeLayout>
4

3 回答 3

4
<TableRow
     android:id="@+id/tableRow1"
     android:layout_width="match_parent"
     android:layout_height="wrap_content" >

     <TextView
           android:layout_weight="1 --- this worked for me"  
           android:gravity="center"
           android:padding="10dp"
           android:background="#44FFFFFF"
           android:textColor="#FF000000"
           android:text="Field (0,0)" />
    <TextView
           android:layout_weight="1"
           android:gravity="center"
           android:padding="10dp"
           android:background="#88FFFFFF"
           android:textColor="#FF000000"
           android:text="Field (0,1)" />

</TableRow>
于 2013-11-15T01:10:49.590 回答
1

您需要在 java 文件中以编程方式获取基本线性布局的宽度...

如何获得宽度?在这里检查

之后,您可以将表格布局的宽度设置为相同的宽度

  TableLayout layout = (TableLayout)findViewById(R.id.tableLayout);
    // Gets the layout params that will allow you to resize the layout

LayoutParams params = layout.getLayoutParams();

// Changes the height and width to the specified *pixels*

params.width = x;

layout.setlayoutparams(params);

x 是您从线性布局中获得的宽度

于 2013-11-15T01:04:19.820 回答
1

当您使用TextView没有设置宽度的 s 时,我建议android:layout_width您将所有字段的参数设置为match_parent.

编辑:为什么需要第二个 LinearLayout?它似乎没用,因为它只包装了 TableLayout。

于 2013-11-15T00:33:25.367 回答