从代码中将TableRow添加到TableLayout时为什么没有出现

时间:2015-07-18 05:39:38

标签: android android-layout

我正在用XML创建TableLayout:

<TableLayout
    android:id="@+id/button_area"
    android:layout_width="fill_parent"
    android:layout_height="0px"
    android:layout_weight="3">

然后我尝试向行添加按钮(复制&#34;包装面板的效果&#34; - 有点惊讶Android没有这个,但没关系):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    TableLayout layout = (TableLayout) findViewById(R.id.button_area);

    TableRow row = new TableRow(this);
    row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));

    for (int i = 0; i != 12; i++) {
        Button b = new Button(this);
        b.setText("something");
        b.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));

        row.addView(b);

        if (i + 1 % 4 == 0) {
            layout.addView(row);
            row = new TableRow(this);
        }
    }
}

结果是什么 - 没有空指针异常,没有任何日志失败,但遗憾的是TableLayout中没有可见的按钮。

3 个答案:

答案 0 :(得分:0)

此if子句中的语句永远不会被执行。

    if (i + 1 % 4 == 0) {
        layout.addView(row);
        row = new TableRow(this);
    }

这就是原因。

删除if和let按钮,在没有条件的情况下自由添加,它们会出现,然后检查if条件中的错误:i + 1%4 == 0

答案 1 :(得分:0)

确认您已导入TableLayout的LayoutParams而不是ViewGroup的LayoutParams。 StackOverflow上已经回答了许多类似的问题,例如:Programmatically adding TableRow to TableLayout not working

答案 2 :(得分:0)

在随机更改内容之后,事实证明我需要删除此行:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection();
    services.ConfigureDataProtection(configure =>
    {
        configure.SetApplicationName("my application");
    });
}

我不知道为什么按钮不能设置布局参数如果它们被放入一个桌面,我不知道为什么Android有这个名称相同的LayoutParams类,如果你使用了错误的然后东西默默地失败了,但这是我的问题。

你会认为人们愿意将FILL_PARENT重命名为MATCH_PARENT,因为他们认为它更容易理解,不会有这种静默失败的多选类系统。