TableLayout列大小调整

时间:2010-06-24 21:53:20

标签: android

我有一个TableLayout,其中有三列代表带有

的表单

requiredSymbol |标签| inputfield。

我希望输入字段将屏幕的剩余宽度填充到标签上。到目前为止,我找到的唯一解决方案是

<TableLayout android:layout_height="wrap_content"
       android:layout_width="fill_parent" 
       android:stretchColumns="2">
    <TableRow>
                    <TextView android:text="@string/requiredSymbol"
                              />
     <TextView android:text="@string/Name"
                              android:textColor="@color/orange"
                              android:gravity="left|center_vertical"
         />
     <EditText android:id="@+id/contactName"
         android:inputType="text|textPersonName"
                              android:ellipsize="end"
                            android:singleLine="true"
                            android:scrollHorizontally="true"
                            android:maxWidth="1sp"
                            />
    </TableRow>

maxWidth需要有一些值,实际上是被忽略的。然后,stretchColumns值可以很好地完成它的工作。请注意,如果EditText的内容会使表跨越屏幕边框(imho a bug ..),这也有效。

现在这很好用,但对我来说似乎有点黑客。还有更好的方法吗?

4 个答案:

答案 0 :(得分:2)

尝试在列上使用android:layout_weight,但请确保在TableLayout中设置android:stretchColumns。我遇到过TableLayout单方面决定缩小列导致不需要的文本换行的问题。我不确定layout_weight和单边列缩小的使用是否相关。

答案 1 :(得分:0)

似乎在这个使用静态xml文件的阶段没有更好的方法。但是我已经将布局更改为没有单独的列所需的标签/图标,并将其更改为使用EditText #setError消息以及每个字段上的TextWatcher实现,无论如何都要好得多。

答案 2 :(得分:0)

我实现此目的的方法是在将width字段添加到宽度为EditText的布局后获取FILL_PARENT字段,然后使用该字段设置{{1} }}

看起来像这样:

MaxWidth

不是我最喜欢的方式,但它绝对可靠。

答案 3 :(得分:0)

通过将EditText包装在FrameLayout中并将EditText设置为match_parent,我能够使EditText与剩余宽度相匹配。这似乎也适用于Spinners。

<TableLayout
    android:shrinkColumns="1"
    android:stretchColumns="1" >

    <TableRow>

        <!-- column 0 -->
        <TextView
            android:text="some text" />

        <!-- column 1 -->
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

        </FrameLayout>

    </TableRow>

</TableLayout>