Android 如何动态添加按钮行

Android 如何动态添加按钮行,android,android-layout,button,Android,Android Layout,Button,我在用java代码动态添加按钮时遇到了一个大问题 我想在我的应用程序中添加按钮,因此数字取决于答案的字符数 如果答案包含4个字符我应该显示4个按钮,下面的代码只是添加一个按钮我想添加更多按钮我需要帮助 main.java TableRow tr= new TableRow(this); final Button btn = new Button(this); TableRow.LayoutParams tl= new TableRow.LayoutParams(

我在用java代码动态添加按钮时遇到了一个大问题
我想在我的应用程序中添加按钮,因此数字取决于答案的字符数
如果答案包含4个字符我应该显示4个按钮,下面的代码只是添加一个按钮我想添加更多按钮我需要帮助

main.java

  TableRow tr= new TableRow(this);
        final Button btn = new Button(this);
       TableRow.LayoutParams tl= new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT
               , TableRow.LayoutParams.WRAP_CONTENT);

        btn.setBackgroundColor(Color.GRAY);
             btn.setText("h");
             tl.setMargins(10,10,0,0);
          btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           btn.setText(" ");
           }
         });


         tr.addView(btn,tl);

         setContentView(tr);

i

最直接的方法是在布局中添加视图,作为按钮的占位符。我使用了相对布局。我的主布局有一个用于输入的edittext,一个用于触发新按钮生成的按钮,以及一个用于保存新按钮的相对布局。默认情况下,相对布局不会滚动,因此根据您的最终目标,可能需要更多的工作。以下是主按钮的onClick侦听器:

TableRow tr= new TableRow(MainActivity.this);

            for(char c:editText.getText().toString().toCharArray()) {
                final Button btn = new Button(MainActivity.this);
                TableRow.LayoutParams tl = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT
                        , TableRow.LayoutParams.WRAP_CONTENT);

                btn.setBackgroundColor(Color.GRAY);
                btn.setText(String.valueOf(c));
                tl.setMargins(10, 10, 0, 0);
                btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        btn.setText(" ");
                    }
                });


                tr.addView(btn, tl);
            }

            holder.removeAllViews();
            holder.addView(tr);

遵循并使用以下代码

parentLayout = (TableLayout) findViewById(R.id.parent);
        input = (EditText) findViewById(R.id.input);
        findViewById(R.id.done).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String message = input.getText().toString().trim();
                int size = message.length();
                parentLayout.removeAllViews();
                if (size != 0) {
                    int loop = (message.length() / maxRowButtons) + 1;
                    for (int i = 0; i < loop; i++) {
                        TableRow tableRow = new TableRow(Test.this);
                        int buttonCount = size % maxRowButtons == 0 ? maxRowButtons : size % maxRowButtons;
                        for (int j = 0; j < buttonCount; j++) {
                            final Button btn = new Button(Test.this);
                            TableRow.LayoutParams tl = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT
                                    , TableRow.LayoutParams.WRAP_CONTENT);
                            btn.setBackgroundColor(Color.GRAY);
                            btn.setText(" Hi ");
                            tl.setMargins(10, 10, 0, 0);
                            btn.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    btn.setText(" ");
                                }
                            });
                            tableRow.addView(btn);
                        }
                        parentLayout.addView(tableRow);
                    }
                }
            }
        });
    }
parentLayout=(TableLayout)findViewById(R.id.parent);
输入=(EditText)findViewById(R.id.input);
findviewbyd(R.id.done).setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
字符串消息=input.getText().toString().trim();
int size=message.length();
parentLayout.removeallview();
如果(大小!=0){
int循环=(message.length()/maxRowButtons)+1;
for(int i=0;i

希望它能为你工作

我想要一些不同的东西我想要一些看起来像这样的东西这是我的设计,但在这个设计中,应答框有固定数量的按钮我想保留按钮的数量,因为标志字符的错误请帮我一个多星期我一直在搜索,没有任何东西帮我你需要更改逻辑,以便每5个字符(如果将视图添加到保持器中)生成一个新的表行。同时移除
支架。removeAllViews()
否则它将只显示最后一个。我想将它们添加到同一表格行或同一行中,而不是不同行中的每个按钮
parentLayout = (TableLayout) findViewById(R.id.parent);
        input = (EditText) findViewById(R.id.input);
        findViewById(R.id.done).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String message = input.getText().toString().trim();
                int size = message.length();
                parentLayout.removeAllViews();
                if (size != 0) {
                    int loop = (message.length() / maxRowButtons) + 1;
                    for (int i = 0; i < loop; i++) {
                        TableRow tableRow = new TableRow(Test.this);
                        int buttonCount = size % maxRowButtons == 0 ? maxRowButtons : size % maxRowButtons;
                        for (int j = 0; j < buttonCount; j++) {
                            final Button btn = new Button(Test.this);
                            TableRow.LayoutParams tl = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT
                                    , TableRow.LayoutParams.WRAP_CONTENT);
                            btn.setBackgroundColor(Color.GRAY);
                            btn.setText(" Hi ");
                            tl.setMargins(10, 10, 0, 0);
                            btn.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    btn.setText(" ");
                                }
                            });
                            tableRow.addView(btn);
                        }
                        parentLayout.addView(tableRow);
                    }
                }
            }
        });
    }