我想在TableLayout
中嵌套RelativeLayout
,然后在我的Java代码中动态编辑TableLayout。
我的XML-File看起来像这样:
<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添加到Layout中,唯一不起作用的是我的Layout的“重新绘制”。我如何实现这一目标?
显然,使这个不起作用的事实上是给TableRow的LayoutParams,一旦我评论了那些我至少把它打印到屏幕上。然而,它们并不是我所期望的。 我希望它们位于按钮下方,而不是它们位于按钮顶部的左上角。这让我相信TableLayout实际上与RelativeLayout的大小相同,但是在RelativeLayout之上。因此,错误应该出现在我的XML文件中。我需要多大的高度才能让我的TableLayout以我期望的方式工作?
我需要将android:layout_below
属性添加到我的TableLayout中,现在就像魅力一样!
答案 0 :(得分:1)
您需要调用方法“requestLayout()”
当某些内容发生变化而导致此视图的布局无效时,请调用此方法。这将安排视图树的布局传递。