TableLayout / Rows / TextView边距

时间:2013-11-10 20:11:54

标签: android tablelayout gridlines

我有tablelayout的行,每行都有一堆textview(全部以编程方式添加,没有xml),我想有网格线,所以我试图通过laoyoutparams添加边距,但看起来像TableLayout.LayoutParams不适用仅对文本视图行,所以我在行上获得了边距,但没有在单元格上获得边距。我也试过在细胞上使用RelativeLaout.LayoutParams,但是thaqt也不起作用。任何人都可以为我的问题提出任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

  1. TableLayout;使用TableLayout.LayoutParams
  2. TableRow;使用TableRow.LayoutParams
  3. 修改:我编辑了代码。某些单元格需要一些黑色空格。您可以通过为该视图设置相同的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;
    }
    

    以下是此代码的输出,我们可以看到正确应用边距:
    enter image description here