我有tablelayout的行,每行都有一堆textview(全部以编程方式添加,没有xml),我想有网格线,所以我试图通过laoyoutparams添加边距,但看起来像TableLayout.LayoutParams不适用仅对文本视图行,所以我在行上获得了边距,但没有在单元格上获得边距。我也试过在细胞上使用RelativeLaout.LayoutParams,但是thaqt也不起作用。任何人都可以为我的问题提出任何解决方案吗?
答案 0 :(得分:1)
您应该对视图使用正确的LayoutParams
。
在添加视图时:
TableLayout
;使用TableLayout.LayoutParams
TableRow
;使用TableRow.LayoutParams
。 修改:我编辑了代码。某些单元格需要一些黑色空格。您可以通过为该视图设置相同的bg颜色(或单元格中的行和视图的透明bg)来实现此目的。我认为使用tableLayout为textViews设置相同的bg颜色更容易。
以下是您可以尝试的完整代码示例(添加颜色以便轻松查看输出):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TableLayout tableLayout = createTableLayout(16, 14);
setContentView(tableLayout);
makeCellEmpty(tableLayout, 1, 6);
makeCellEmpty(tableLayout, 2, 3);
makeCellEmpty(tableLayout, 3, 8);
makeCellEmpty(tableLayout, 3, 2);
makeCellEmpty(tableLayout, 4, 8);
makeCellEmpty(tableLayout, 6, 9);
}
public void makeCellEmpty(TableLayout tableLayout, int rowIndex, int columnIndex) {
// get row from table with rowIndex
TableRow tableRow = (TableRow) tableLayout.getChildAt(rowIndex);
// get cell from row with columnIndex
TextView textView = (TextView)tableRow.getChildAt(columnIndex);
// make it black
textView.setBackgroundColor(Color.BLACK);
}
private TableLayout createTableLayout(int rowCount, int columnCount) {
// 1) Create a tableLayout and its params
TableLayout.LayoutParams tableLayoutParams = new TableLayout.LayoutParams();
TableLayout tableLayout = new TableLayout(this);
tableLayout.setBackgroundColor(Color.BLACK);
// 2) create tableRow params
TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams();
tableRowParams.setMargins(1, 1, 1, 1);
tableRowParams.weight = 1;
for (int i = 0; i < rowCount; i++) {
// 3) create tableRow
TableRow tableRow = new TableRow(this);
tableRow.setBackgroundColor(Color.BLACK);
for (int j= 0; j < columnCount; j++) {
// 4) create textView
TextView textView = new TextView(this);
textView.setText(String.valueOf(j));
textView.setBackgroundColor(Color.WHITE);
textView.setGravity(Gravity.CENTER);
// 5) add textView to tableRow
tableRow.addView(textView, tableRowParams);
}
// 6) add tableRow to tableLayout
tableLayout.addView(tableRow, tableLayoutParams);
}
return tableLayout;
}
以下是此代码的输出,我们可以看到正确应用边距: