如何动态添加按钮?

问题描述 投票:0回答:4

我想动态添加按钮。我动态添加多个按钮,但我想按以下模式添加按钮:

[BUTTON1] [BUTTON2]
[BUTTON3] [BUTTON4]
[BUTTON5] [BUTTON6]

这意味着我想在动态连续添加2个按钮。

我尝试了很多选择。其中一个是:

 LinearLayout ll = (LinearLayout) findViewById(R.id.buttonlayout);
    Button[][] buttonArray = new Button[count][count];
    TableLayout table = new TableLayout(this);
    for (int row = 0; row < count; row++) {
        TableRow currentRow = new TableRow(this);
        for (int button = 0; button < row; button++) {
            Button currentButton = new Button(this);
            // you could initialize them here
            currentButton.setOnClickListener(this);
            // you can store them
            buttonArray[row][button] = currentButton;
            // and you have to add them to the TableRow
            currentRow.addView(currentButton);
        }
        // a new row has been constructed -> add to table
        table.addView(currentRow);
    }

最后获取该新表并将其添加到您的布局中。 ll.addView(table);

注意:按钮数可以是随机的。

我怎样才能做到这一点?

android button layout
4个回答
2
投票

在XML中使用垂直LinearLayout。然后以编程方式创建水平LinearLayout并在水平布局中添加按钮。对于每一行,创建并添加新的水平布局。

XML:

<LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/buttonlayout">
</LinearLayout>

活动:

public class dynamicButtons extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.myLayout);

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

    int numberOfRows = 3;
    int numberOfButtonsPerRow = 2;
    int buttonIdNumber = 0;


    final LinearLayout verticalLayout= LinearLayout)findViewById(R.id.buttonlayout);

    for(int i=0;i<numberOfRows;i++){
      LinearLayout newLine = new LinearLayout(this);
      newLine.setLayoutParams(params);
      newLine.setOrientation(LinearLayout.HORIZONTAL);
      for(int j=0;j<numberOfButtonsPerRow;j++){
            Button button=new Button(this);
            // You can set button parameters here:
            button.setWidth(20);
            button.setId(buttonIdNumber);
            button.setLayoutParams(params);
            button.setText("Button Name");
            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {

                    Intent is = new Intent(getApplicationContext(), someOtherApplication.class);
                    is.putExtra("buttonVariable", buttonIdNumber);
                    startActivity(is);
                }
            });

            newLine.addView(button);
            buttonIdNumber++;
      }
      verticalLayout.addView(newLine);

    }
   }
  }

0
投票

试试这段代码:

TableLayout layout = new TableLayout (this);
    layout.setLayoutParams( new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));

    for (int i=0; i<2; i++) {   //number of rows
        TableRow tr = new TableRow(this);
        for (int j=0; j<2; j++) { //number of columns
            Button b = new Button (this);
            b.setText("Button:"+i+j);
            b.setTextSize(10.0f);
            b.setOnClickListener(this);
            tr.addView(b, 30,30);
        }
        layout.addView(tr);
    }

由于您的按钮数量是随机的,您可以使用:

 int total = 20;  //random number of buttons
int column = 3;    //specify the column number
int row = total / column;  

现在使用columnrow值动态显示按钮


0
投票

做这样的事情:

    LinearLayout ll_Main  = new LinearLayout(getActivity());
    LinearLayout ll_Row01 = new LinearLayout(getActivity());
    LinearLayout ll_Row02 = new LinearLayout(getActivity());

    ll_Main.setOrientation(LinearLayout.VERTICAL);
    ll_Row01.setOrientation(LinearLayout.HORIZONTAL);
    ll_Row02.setOrientation(LinearLayout.HORIZONTAL);

    final Button button01    = new Button(getActivity());
    final Button button02    = new Button(getActivity());   
    final Button button03    = new Button(getActivity());
    final Button button04    = new Button(getActivity());

    ll_Row01.addView(button01);
    ll_Row01.addView(button02);

    ll_Row02.addView(button03);
    ll_Row02.addView(button04);

    ll_Main.addView(ll_Row01);
    ll_Main.addView(ll_Row02);

    button04.setVisibility(View.INVISIBLE);
    button04.setVisibility(View.VISIBLE);

0
投票

如您在问题中提到的那样,使用自定义项目创建listview / recyclerview,而不是按照您在问题中提到的那样,使用按钮填充listView(如果项目索引%2 == 0则在适配器内部,否则将采用左侧位置,否则为正确位置)。

© www.soinside.com 2019 - 2024. All rights reserved.