0

我正在尝试在 Android 中向我的表格布局动态添加行(我参考了本教程:http ://en.androidwiki.com/wiki/Dynamically_adding_rows_to_TableLayout )。但是,它会导致不正确的视图层次结构。我附上了代码和输出图像。

XML 文件:

<TableLayout
    android:id="@+id/task_table"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:shrinkColumns="*"
    android:stretchColumns="*" >
    <TableRow
        android:id="@+id/task_heading_row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal" >

        <TextView
            android:id="@+id/task_heading_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="Task"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="1"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="2"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="3"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="4"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="5"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_6"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="6"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_7"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="7"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
        <TextView
            android:id="@+id/time_8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_span="6"
            android:text="8"
            android:textSize="12sp"
            android:textStyle="bold"
            android:typeface="serif" >
        </TextView>
    </TableRow>
</TableLayout>

Java 代码:

 TableRow row = new TableRow(this);
 row.setLayoutParams(new TableRow.LayoutParams(
         TableRow.LayoutParams.MATCH_PARENT,
         TableRow.LayoutParams.WRAP_CONTENT)); 
 TextView t1 = new TextView(this);
 t1.setLayoutParams(new TableRow.LayoutParams(
         TableRow.LayoutParams.MATCH_PARENT,
         TableRow.LayoutParams.WRAP_CONTENT));

 String heading = "heading";
 t1.setText(heading);
 row.addView(t1);
 for (int i=0;i<8;i++){
     TextView view = new TextView(this);

     view.setLayoutParams(new TableRow.LayoutParams(
             TableRow.LayoutParams.MATCH_PARENT,
             TableRow.LayoutParams.WRAP_CONTENT));
     view.setText("child");
     row.addView(view);
 }
 task_table.addView(row, new TableLayout.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));

在输出中,我在循环中添加的所有带有文本“child”的 8 个视图都被添加到标题为 1 的列中,而不是每列一个“child”。

预期输出:

Task |     1 |     2 |     3 |      4 |     5 |    6 |     7 |     8 

heading | child | child | child | child | child | child | child | child

实际输出:

Task |     1 |     2 |     3 |      4 |     5 |    6 |     7 |     8 

heading | child child child child child child child child | | | | | | | 

有人可以帮助我,让我知道我做错了什么吗?任何帮助将不胜感激。

4

1 回答 1

0

有人可以帮助我,让我知道我做错了什么吗?

我怀疑您以编程方式添加的所有 8个TextViews都进入该1列,最有可能 6 个进入标题列,另外两个进入 1 列。

在布局中,您使用layout_span所有属性的属性,TextViews这意味着每个属性都TextViews设置为分布在 6 个普通列上。现在,当您将它们添加Textviews到代码中时,它们会同时填充一列(没有传播),因此最终您不会得到一对一的匹配。

layout_span从布局中删除该属性,TextViews或者如果由于某种奇怪的原因,您不能将相同的layout_span属性添加到TextViews您在代码中添加的属性(通过TableRow.LayoutParams)。

此外,您不需要为 theTableRow及其子项指定所有这些 layout_width/height 参数,因为它们具有特殊约束(因此这些值是无用的)。当设置为拉伸其内容以填充宽度时,当您告诉您将其内容居中时,这android:gravity="center_horizontal"又是无用的。TableRowTableLayout

于 2013-03-23T18:52:44.303 回答