动态地将TableRow添加到xml中的T​​ableLayout

时间:2017-03-07 18:03:08

标签: android tablelayout android-tablelayout

虽然这看起来很多重复的问题,但第一次对我而言。我搜索了所有结果,但无法得到结果,最后发布在这里。

我正在动态创建一个表,其中TableLayout部分是用xml部分编写的。

<RelativeLayout
        android:layout_width="70dp"
        android:layout_height="40dp"
        android:background="@color/colorPrimaryDark"
        android:id="@+id/componentA">
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:gravity="center"
            android:id="@+id/tl_componentA">


        </TableLayout>

</RelativeLayout>

我为表格

创建了一个对象
TableLayout tableLayoutA;
tableLayoutA= (TableLayout)view.findViewById(R.id.tl_componentA);

现在我尝试从此处动态添加一行

createTableRowColumn(tableLayoutA);

相关功能

private void createTableRowColumn(TableLayout tableLayout){

        TableRow tableRow1= new TableRow(this.context);
        tableRow1.setBackgroundColor(getResources().getColor(R.color.colorAccent));
        setTableRowColumnProperty(tableRow1);
        tableLayout.addView(tableRow1);
    }

private void setTableRowColumnProperty(TableRow tableRow){

    TableRow.LayoutParams layoutParams= new TableRow.LayoutParams(70, 40);
    tableRow.setLayoutParams(layoutParams);
}

我做了这一切,并没有在emulater中显示我。但是当我用xml手动给出相同的结构时,事情就好了。

出于这个原因,我试图找出一些东西

Toast.makeText(getContext(), tableLayoutA.getHeight()+"", Toast.LENGTH_LONG).show();

在toast中它向我展示了0.我无法理解为什么,虽然我已经修复了xml本身中tableLayoutA的大小。

1 个答案:

答案 0 :(得分:1)

现实生活中的一张桌子至少需要一行一列。 你没有看到表,因为你只创建了一行,但是没有列。

您需要在该行中添加一列以显示某些内容。

试试这个:

  TextView label_date = new TextView(this);
    label_date.setText("DATE");
    label_date.setTextColor(Color.WHITE);
    label_date.setPadding(5, 5, 5, 5);
    tableRow.addView(label_date);// add the column to the table row here

    tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

您可以将textView替换为您想要的任何值。

tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

在这里,你要说的是,在tableLayout中添加一个视图并告诉它是哪个视图,你还要说视图的宽度和高度应该包装它的内容。

另外,指定40,70不是一个好主意,当你有不同的屏幕尺寸时会发生什么。此外,使用库来处理动态视图添加和删除。您无需重新发明轮子并节省大量时间和精力。对于表格视图,https://github.com/EsotericSoftware/tablelayout可能是一个好的(不确定)。另一个问题是,表格查看您在寻找什么?请确保您没有将recyclerView误认为表格视图,我这样说是因为我不了解您的用例。

有用的链接:https://technotzz.wordpress.com/2011/11/04/android-dynamically-add-rows-to-table-layout/