TableLayout with layout_width = matchparent不匹配parent

时间:2013-05-23 12:48:44

标签: android android-layout android-tablelayout

我有一个有两列和两行的tableLayout,两行和最后一列的宽度都是match_parent,但是布局没有填充父宽度,它就像它有wrap_content那样自我编译。

以下是代码:

<TableLayout android:layout_width="match_parent">
    <TableRow android:layout_width="match_parent">
        <TextView 
            android:layout_width="wrap_content"
            android:text="static" />
        <EditText
            android:layout_width="match_parent"
            android:text="text" />
    </TableRow>

    <TableRow android:layout_width="match_parent">
        <TextView 
            android:layout_width="wrap_content"
            android:text="static2" />
        <EditText
            android:layout_width="match_parent"
            android:text="text2" />
    </TableRow>
</TableLayout>

对于具有父级宽度的每一行,我需要做什么?

Ps:我工作的地方不允许我发布我的代码,所以我编写了尽可能接近代码的代码。我不知道它是否正确,我无法测试。

3 个答案:

答案 0 :(得分:24)

尝试使用此代码,我认为它会对您有所帮助:

  <TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    >

    <TableRow android:layout_width="match_parent" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:text="static" />

        <EditText
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:text="text" />
    </TableRow>

    <TableRow android:layout_width="match_parent" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:text="static2" />

        <EditText
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:text="text2" />
    </TableRow>
</TableLayout> 

答案 1 :(得分:2)

还要考虑是否有其他行的内容比包含TextView的其他行更宽,因为权重属性不能正常工作。考虑这个例子:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

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

             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="Short Text" />

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

    </TableRow>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Short Text"
            android:layout_weight="1"/>

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

    </TableRow>

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

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Reaaaaaaaaaaaaaaaaaaaaaaaaaally lengthy and text"/>

    </TableRow>

所以这就是结果:

  • 第三行单元格设置每个左侧单元格宽度。
  • 第一行中的EditText从左侧单元格结束的位置开始(几乎是屏幕宽度的四分之三)。
  • 第二行每个单元格的权重为1,因此该行中的两个单元格应该测量屏幕的一半,但由于第一个单元格宽,所以权重按比例计算,因此即使您设置权重为50对于正确的单元格,你永远不会得到一半的屏幕,因为第一个单元格不能小于第三个单元格的内容。

答案 2 :(得分:-1)

我会尝试在TableRow中添加android:weight="1"