0

我有带有行的表格布局,并且在每一行中有一堆文本视图(全部以编程方式添加,没有 xml),我想要网格线,所以我试图通过 laoyoutparams 添加边距,但它看起来像 TableLayout.LayoutParams 仅适用于 textviews到行,所以我在行上得到一个边距,但在单元格上没有。我也尝试过在单元格上使用 RelativeLaout.LayoutParams,但 thaqt 也不起作用。任何人都可以为我的问题提出任何解决方案?

4

1 回答 1

1

您应该使用正确LayoutParams的视图。在添加视图时:

  1. TableLayout; 采用TableLayout.LayoutParams
  2. TableRow; 使用TableRow.LayoutParams.

编辑:我已经编辑了代码。您希望某些单元格有一些黑色空间。您可以通过为该视图设置相同的背景颜色(或为行和单元格上的视图设置透明背景)来实现这一点。我认为使用 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;
}

这是此代码的输出,我们可以看到边距已正确应用:
在此处输入图像描述

于 2013-11-10T21:13:12.357 回答