0
我的應用程序中有一個TableLayout,我需要以編程方式定義和添加TableLayout,因爲它建立在SQL查詢的輸出上。基本上,結果應該與時間表類似(一週內每天7列,每天不同時間段多行)。對於單元/時隙,我只需要具有特定背景顏色的普通視圖。以編程方式在TableLayout/TableRow中添加視圖的高度和寬度爲0
問題是,所有視圖的高度和寬度都是0,儘管如此。我究竟做錯了什麼?
代碼:
RelativeLayout.LayoutParams tableLayout = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
tableLayout.addRule(RelativeLayout.BELOW, R.id.myOtherLayout);
tableLayout.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
TableLayout table = new TableLayout(this);
table.setBackgroundColor(Color.WHITE);
table.setMinimumHeight(PixelConverter.pxToSp(this, 240));
// get availability table data
int[][] tableData = getTableData(...);
if (availability != null) {
// init array of tablerows, which represent one line each for every timeslot
for (int timeSlot = 0; timeSlot < 12; h++) {
// init row
TableRow newRow = new TableRow(this);
newRow.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, // width
10)); // height
newRow.setMinimumHeight(10);
// create 7 views in each row - one for each day in a week
for (int day = 0; day < 7; d++) {
View v = new View(this);
v.setLayoutParams(new LinearLayout.LayoutParams(
10, // TODO width
10)); // height
v.setMinimumWidth(10);
v.setMinimumHeight(10);
int cellHue = tableData[day][timeSlot];
if (cellHue >= 0) {
v.setBackgroundColor(Color.HSVToColor(new float[] { cellHue, 100, 100 }));
} else {
v.setBackgroundColor(Color.TRANSPARENT);
}
// add view to tablerow
newRow.addView(v, day);
}
table.addView(newRow, timeSlot);
}
}
table.setId(R.id.my_table_id);
mainLayout.addView(table, tableLayout);
是的,瀏覽了一下LInearLayout的文檔:「設置與這個視圖相關的佈局參數,這些參數提供給這個視圖的** parent **,指定應該如何排列它ViewGroup.LayoutParams的許多子類,並且這些對應於ViewGroup的不同子類,負責安排他們的子女。「 – mpd106 2011-07-19 07:13:29
是的,工作 - 謝謝馬特!實際上它以不同的方式解決了這個問題,但我可以發誓我看到一個官方Google教程採用了「錯誤的」LayoutParams(因此認爲它們或多或少是可互換的)。 – benfwirtz 2011-07-19 11:24:43
是的,我對Android非常陌生,而且我看到很多例子都是關於使用錯誤的LayoutParams的。啊,最後到達那裏:) – mpd106 2011-07-20 07:25:34