以编程方式创建TableLayout

mar*_*ark 25 android tablelayout

我正在尝试以编程方式创建TableLayout.它不会起作用.然而,xml文件中的相同布局有效.这就是我所拥有的:

public class MyTable extends TableLayout
{
    public MyTable(Context context) {
        super(context);

        setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        TableRow row = new TableRow(context);
        row.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

        Button b = new Button(getContext());
        b.setText("hello");
        b.setLayoutParams(new LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
        row.addView(b); 
        addView(row)
    }
}

...

// In main activity:
MyTable table = new MyTable(this);
mainLayout.addView(table);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我没有崩溃,但没有出现.如果我摆脱TableRow实例,至少该按钮确实显示为TableLayout的直接子项.我究竟做错了什么?

Gri*_* A. 34

只是为了让答案更清楚:

TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT);
TableRow.LayoutParams rowParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);

TableLayout tableLayout = new TableLayout(context);
tableLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));// assuming the parent view is a LinearLayout

TableRow tableRow = new TableRow(context);
tableRow.setLayoutParams(tableParams);// TableLayout is the parent view

TextView textView = new TextView(context);
textView.setLayoutParams(rowParams);// TableRow is the parent view

tableRow.addView(textView);
Run Code Online (Sandbox Code Playgroud)

说明
调用时setLayoutParams,应该传递LayoutParams父视图

  • 不应该是tableRow.setLayoutParams(rowParams)吗? (4认同)
  • 花了一个小时试图找出我做错了什么 - 结果在你的代码中你错过了将 `tableRow` 添加到 `tableLayout`:`tableLayout.addView(tableRow);` (3认同)

mar*_*ark 6

事实证明我需要为布局参数指定TableRowLayout,TableLayout等,否则表格就不会显示!

  • 谢谢!@Atma TableRows应该使用TableLayout.LayoutParams,TableRows中的视图应该使用TableRow.LayoutParams.:) (3认同)
  • 你能发布你的代码解决方案吗?看起来你已经在上面做了. (2认同)