1

我想在 a 中嵌套 a TableLayoutRelativeLayout然后在我的 Java 代码中动态编辑 TableLayout 。

我的 XML 文件如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_load_date"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoadDateActivity" >

<!-- few buttons and textviews -->

    <TableLayout
        android:id="@+id/activity_load_date_table_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/button" >
    </TableLayout> 
</RelativeLayout>

Java 代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_load_date);
    //Do something with my Buttons and TextViews(this works fine)

tblLayout = (TableLayout) findViewById(R.id.activity_load_date_table_layout);

}

@Override
public void onClick(View v) {
if (v.getId() == R.id.button_calc) {
    for (int i = 0; i < listOfEntries.size(); i++) {
        Entry temp = listOfEntries.get(i);

        if (temp.getDate().getTime() >= startDate.getTime()
                && temp.getDate().getTime() <= endDate.getTime()) {

            TableRow tr = new TableRow(this);
            TextView comm = new TextView(this);
            comm.setText(listOfEntries.get(i).getComment());
            TextView val = new TextView(this);
            val.setText(String.valueOf(listOfEntries.get(i).getValue()));

            LayoutParams params = new LayoutParams(0,
                    LayoutParams.WRAP_CONTENT, 1f);
            tr.setLayoutParams(params);
            tr.addView(comm);
            tr.addView(val);
            tblLayout.addView(tr);
        }
    }
         tblLayout.invalidate(); //Shouldn't this redraw the entire TableLayout and therefore adding my TableRows? This is not working.
}
}

通过对 TextViews 和 Toasts 的各种测试,我收集到应该填充 tblLayout 并将 TableRows 添加到布局中,唯一不起作用的是我的布局的“重新绘制”。我该如何做到这一点?

编辑:

显然,使这不起作用的实际上是给 TableRow 的 LayoutParams,一旦我将它们注释掉,我至少将它打印到屏幕上。然而,它们并不是我所期望的。我希望它们位于按钮下方,而不是位于按钮顶部的左上角。这让我相信 TableLayout 实际上与 RelativeLayout 的大小相同,但位于 RelativeLayout 之上。因此,错误应该存在于我的 XML 文件中。我需要给我的 TableLayout 多少高度才能使这项工作按我期望的方式工作?

编辑2:

我需要将android:layout_below属性添加到我的 TableLayout 中,现在就像一个魅力!

4

1 回答 1

1

您需要调用方法“requestLayout()”

当某些事情发生变化而导致该视图的布局无效时调用它。这将安排视图树的布局传递。

于 2013-04-08T13:56:50.677 回答