0

TableLayout要显示一些数据。每行有两列:第一列包含字段名称,第二列包含字段值。如果单击任何字段,我将显示一个EditText. 我使用ViewSwitcher.

TextView/EditText只有几个字符时,视图很好,但如果第一行已满,则第一列(字段名称)变得更窄,第二列变得更宽。我不希望这种情况发生,我希望我的列总是相同的大小。

这是我的布局:

<TableLayout
    android:id="@+id/formLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textLicense"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/license"
            android:textSize="18sp"
            android:textStyle="bold" />

        <ViewSwitcher
            android:id="@+id/licenseSwitcher"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3" >

            <TextView
                android:id="@+id/tvLicenseVariable"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:onClick="LicenseViewClicked"
                android:textSize="18sp" />

            <com.timeondriver.petrolcontrol.MySpinner
                android:id="@+id/spinnerLicense"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:prompt="@string/license_prompt" />
        </ViewSwitcher>
    </TableRow>

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

        <TextView
            android:id="@+id/textDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/date"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tvDateVariable"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:clickable="true"
            android:onClick="DateViewClicked"
            android:textSize="18sp" />
    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp">

        <TextView
            android:id="@+id/textPlace"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/place"
            android:textSize="18sp"
            android:textStyle="bold" />

        <ViewSwitcher
            android:id="@+id/placeSwitcher"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3" >

            <TextView
                android:id="@+id/tvPlaceVariable"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:onClick="PlaceViewClicked"
                android:textSize="18sp" />

            <EditText
                    android:id="@+id/editTextPlace"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                android:imeOptions="actionDone"
            android:maxLines="3"
                    android:inputType="textMultiLine"
                     />
        </ViewSwitcher>
    </TableRow>
</TableLayout>

这是位置数据较短时视图的外观:

在此处输入图像描述

这就是当地点数据有太多字符(第一行已满)时视图的样子:

在此处输入图像描述

许可证、日期和时间行不是问题,因为它们的大小是有限的。具有位置数据的行是在字符过多时更改列宽的行。我怎样才能在我的列中始终保持相同的宽度?

谢谢!

4

1 回答 1

2

我想问题是你指定了一个 layout_width 和一个 layout_weight。如果您没有输入足够的文本,则似乎使用了指定的 layout_width,即 wrap_content。如果您输入足够多的文本,您会达到大于指定 layout_weight 的宽度,因此此时 layout_weight 属性很重要。要始终具有相同大小的列,请尝试将 layout_width 设置为 0dpi,以便仅使用 layout_weight 属性。然后您必须在两列之间指定不同的比率,因为 1/4 到 3/4 似乎不适合左列中的文本。也许您应该选择 2/5 到 3/5 之类的值,这意味着左列的 layout_weight=2 和右列的 3。

于 2013-03-01T11:21:16.457 回答