我的应用程序中有一个TableLayout,我需要以编程方式定义和添加,因为它构建在SQL查询的输出之上。基本上,结果看起来应该与时间表类似(一周中每天7列,每天不同时段有多行)。对于细胞/时间段,我只需要具有特定背景颜色的普通视图。
问题是,尽管另有定义,但所有视图的高度和宽度都为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);
答案 0 :(得分:2)
我遇到了类似的问题 - 问题似乎是在夸大观看次数后选择LayoutParams
类型。特别是,以下可能是您问题的根源:
View v = new View(this);
v.setLayoutParams(new LinearLayout.LayoutParams(
10, // TODO width
10)); // height
我建议您尝试:
View v = new View(this);
v.setLayoutParams(new TableRow.LayoutParams(
10, // TODO width
10)); // height
关键是你在使用LayoutParams
时显然应该指定父视图的类型,而不是你设置它们的视图的类型。请注意,在这种情况下,您可能还需要在行上调用TableLayout.LayoutParams
时指定setLayoutParams
。
我不知道这有多少记录 - 我注意到它在我发现的任意博客上提到(现在丢失链接,唉)我还没有机会回到官方文件,但可能是它在某处... :)。
希望这有帮助!