Android动态按钮-每行的数量不同

Android动态按钮-每行的数量不同,android,button,dynamic,Android,Button,Dynamic,我试图在每行添加不同数量的按钮。假设每行中有随机数目的按钮。行数是定义的常量。我看了一些教程,到目前为止有以下代码。这将在每行中生成相同数量的按钮。你能帮忙吗?多谢各位 private void populateButtons() { TableLayout table = (TableLayout) findViewById(R.id.button); for (int row = 0; row != NUM_ROWS; row++) { TableRow

我试图在每行添加不同数量的按钮。假设每行中有随机数目的按钮。行数是定义的常量。我看了一些教程,到目前为止有以下代码。这将在每行中生成相同数量的按钮。你能帮忙吗?多谢各位

private void populateButtons() { 
    TableLayout table = (TableLayout) findViewById(R.id.button); 
    for (int row = 0; row != NUM_ROWS; row++) { 
        TableRow tableRow = new TableRow(this); 
        tableRow.setLayoutParams(
                new TableLayout.LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT, 
                        TableLayout.LayoutParams.MATCH_PARENT, 1.0f));
        table.addView(tableRow);
        for (int col = 0; col != NUM_COLS; col++){ 
            final int FINAL_COL = col; 
            final int FINAL_ROW = row; 
            Button button = new Button(this); 
            button.setLayoutParams(
                    new TableRow.LayoutParams(
                            TableRow.LayoutParams.MATCH_PARENT, 
                            TableRow.LayoutParams.MATCH_PARENT, 1.0f)); 
            button.setBackgroundResource(R.drawable.button);
            tableRow.addView(button); 
            buttons[row][col] = button; 
        }
    }
}

这是因为对NUM_COLS使用相同的值

如果您想在每行中添加不同数量的按钮,那么您应该像这样为每行定义按钮数量

int[]NUM_COLS={2,3,4}

你的代码是这样的

private void populateButtons() { 
TableLayout table = (TableLayout) findViewById(R.id.button); 
for (int row = 0; row != NUM_ROWS; row++) { 
    TableLayout table = (TableLayout) findViewById(R.id.button1); 
    for (int row = 0; row != NUM_ROWS; row++) { 
        TableRow tableRow = new TableRow(this); 
        tableRow.setLayoutParams(
                new TableLayout.LayoutParams(
                        TableLayout.LayoutParams.WRAP_CONTENT, 
                        TableLayout.LayoutParams.MATCH_PARENT, 1.0f));
        tableRow.setGravity(Gravity.CENTER_HORIZONTAL);
        table.addView(tableRow);
        for (int col = 0; col != NUM_COLS[row]; col++){ 
            final int FINAL_COL = col; 
            final int FINAL_ROW = row; 
            Button button = new Button(this); 
            button.setLayoutParams(
                    new TableRow.LayoutParams(
                            TableRow.LayoutParams.WRAP_CONTENT, 
                            TableRow.LayoutParams.WRAP_CONTENT,0f)); 
        button.setBackgroundResource(R.drawable.button);
        tableRow.addView(button); 
        buttons[row][col] = button; 
    }
}
}问题在于“随机”数量。您需要知道按钮的最大数量是多少,以及它们的图标和文本是多少。在我看来,最好的办法是将每个按钮放在一个带有id、图标、样式和描述的布局xml中

在ListAdapter onCreateView方法中,您需要有一些逻辑,说明:嘿,在这个项目中,我需要添加按钮Save and Edit,但可能在另一行中添加View、Edit and Remove(查看、编辑和删除),例如,您需要膨胀这些按钮布局,并将它们添加到列表项目布局内的容器中

注意:如果您还支持用户可以按下列表行,则需要添加到每个按钮
android:focusable=“false”
,否则会出现焦点问题

下一步是实现一个包含所有可能按钮操作的接口,每个按钮操作都将作为ListAdapter的唯一参数接收一个条目(假设适配器从ArrayAdapter扩展,每个操作方法将接收一个视频对象)您的片段需要实现这个接口,当您实例化适配器时,您需要传递片段实例(您可以简单地使用这个实例或一个成员实例)


从ListAdapter开始的最后一步,您需要将onClickListener设置为与按钮对应的接口操作方法。您将管理片段中的每个操作,知道按下了哪个项目。

我建议,创建chips TextView并使其单击“可”。好的,您是否有一些示例代码?谢谢你。还有其他的。通常这个概念在EditText中使用,但是你也可以在TextView中实现同样的概念。好的,太好了。这很有效。我现在有了不同列数的行。我将按钮参数设置为button.setLayoutParams(newTableRow.LayoutParams(100250));现在的问题是按钮行没有居中。例如,如果我在第一行中有3个,但在下一行中有4个,那么最上面的一行与第二列匹配。是否有一种方法可以将每个表行居中到父表(TableLayout)内部的中心?另外,如果我生成了更多当前固定大小的按钮,它们将从屏幕上消失,我是否可以让按钮与父按钮匹配,但每行不拉伸?请让我知道。非常感谢。我想我正在尝试将每行的按钮居中,以便它们在屏幕上居中(左-右)。好的,是的,这是一个很好的解释。因此,当用户可以看到按钮被选中时,可聚焦?默认情况下可聚焦为true的对象会将焦点转移到它们身上。在列表项中,当用户按下列表项时,它什么也不做,因为列表项中的其他对象具有焦点。非常感谢。