¿Cómo agrego los botones de forma programática uno por uno en varias líneas?

¿Cómo crear una lista de botones uno por uno en varias líneas? Yo hice esto:

LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags); for (int i = 1; i < 10; i++) { Button btnTag = new Button(this); btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnTag.setText("Button " + i); btnTag.setId(i); layout.addView(btnTag); ((Button) findViewById(i)).setOnClickListener(this); } 

y obtuve solo una línea

tengo esto
¿Cómo ir a la siguiente línea programáticamente?

El problema es que sus botones no se ajustarán automáticamente a la siguiente parte de la pantalla. Tienes que decirle específicamente a Android cómo quieres que se posicionen tus Vistas. Lo hace usando ViewGroups como LinearLayout o RelativeLayout.

 LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags); layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical" for (int i = 0; i < 3; i++) { LinearLayout row = new LinearLayout(this); row.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); for (int j = 0; j < 4; j++) { Button btnTag = new Button(this); btnTag.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); btnTag.setText("Button " + (j + 1 + (i * 4))); btnTag.setId(j + 1 + (i * 4)); row.addView(btnTag); } layout.addView(row); } 

Supongo que R.id.linear_layout_tags es el principal LinearLayout de su XML para esta actividad.

Básicamente, lo que estás haciendo aquí es crear un LinearLayout que será una fila para mantener tus cuatro botones. Luego se agregan los botones y cada uno de ellos se asigna un número incrementalmente como su id. Una vez que se agregan todos los botones, la fila se agrega al diseño de su actividad. Entonces se repite. Esto es solo un pseudo código, pero probablemente funcione.

Ah, y la próxima vez asegúrate de pasar más tiempo en tu pregunta ...

https://stackoverflow.com/questions/how-to-ask

Esto es como 1 respuesta, pero sin la necesidad de hacer un archivo XML.

 public class mainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical" for (int i = 0; i < 3; i++) { LinearLayout row = new LinearLayout(this); row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); for (int j = 0; j < 4; j++) { Button btnTag = new Button(this); btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnTag.setText("Button " + (j + 1 + (i * 4 ))); btnTag.setId(j + 1 + (i * 4)); row.addView(btnTag); } layout.addView(row); } setContentView(layout); //setContentView(R.layout.main); } } 

Esto ayudará

 private void addingParticipantinFrame() { TableRow row; final int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp); add_button_particiapants.setVisibility(View.VISIBLE); if (arrrItemSelcted != null && arrrItemSelcted.size() > 0) { arrrItemSelcted.remove(0); int i = 0; int j = 0; int width = (screenWidth - (arrrItemSelcted.size())*4)/arrrItemSelcted.size(); while (i 

Tuve el problema de que el número de vistas que se colocarán en la interfaz de usuario se estableció durante el tiempo de ejecución. Así que decidí que solo quería cuatro vistas en una fila y adapté el código anterior en consecuencia. Además, siempre llené la última fila con textos de edición invisibles para que las vistas en la última fila también tuvieran el mismo ancho que las vistas en la fila anterior:

  // 1.0f is the weight! LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f); layoutParams.setMarginEnd(10); for (int i = 0; i < Math.ceil(discipline.getSeries_count() / 4.0); i++) { LinearLayout layoutRow = new LinearLayout(MyActivity.this); layoutRow.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); // add only four edit texts to row and move to next line afterwards for (int j = 0; j < 4; j++) { etSeries = new EditText(MyActivity.this); etSeries.setInputType(InputType.TYPE_CLASS_NUMBER); int iIndex = (j + 1 + (i * 4)); etSeries.setText(getResources().getString(R.string.series) + " " + iIndex); etSeries.setId(iIndex); etSeries.setId(i); etSeries.setSelectAllOnFocus(true); etSeries.setLayoutParams(layoutParams); etSeries.setVisibility(iIndex > discipline.getSeries_count() ? View.INVISIBLE : View.VISIBLE); layoutRow.addView(etSeries); } layoutSeries.addView(layoutRow); }