style studio example ejemplo dynamically combinar celdas 3x3 android android-layout android-tablelayout

studio - ¿Qué es el equivalente a "colspan" en un TableLayout de Android?



tablelayout android example dynamically (8)

Creo que debes envolver un diseño alrededor de otro. Tenga una lista de diseño vertical, dentro tenga otra (o en este caso, dos) enumere horizontalmente.

Todavía me resulta difícil dividir muy bien la interfaz con una porción de 50-50 en Android.

Estoy usando TableLayout en Android. Ahora mismo tengo un TableRow con dos elementos, y debajo de eso, un TableRow con un ítem. Se traduce así:

----------------------------- | Cell 1 | Cell 2 | ----------------------------- | Cell 3 | ---------------

Lo que quiero hacer es hacer que Cell 3 se estire en ambas celdas superiores, por lo que se ve así:

----------------------------- | Cell 1 | Cell 2 | ----------------------------- | Cell 3 | -----------------------------

En HTML, usaría un COLSPAN ... ¿cómo hago que esto funcione en Android?


Debe usar layout_weight para completar toda la fila, de lo contrario, todavía ocupará la columna izquierda o derecha del diseño de la tabla.

<TableRow android:id="@+id/tableRow1" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="2" android:layout_weight="1" android:text="ClickMe" /> </TableRow>


He tenido algún problema con rowspan, en el caso de TableRow, Textview y demás, generado con código. Incluso si la respuesta de Onimush parece ser buena, no funciona con la interfaz de usuario generada.

Aquí hay un fragmento de código que ... no funciona:

TableRow the_ligne_unidade = new TableRow(this); the_ligne_unidade.setBackgroundColor(the_grey); TextView my_unidade = new TextView(this); my_unidade.setText(tsap_unidade_nom); my_unidade.setTextSize(20); my_unidade.setTypeface(null, Typeface.BOLD); my_unidade.setVisibility(View.VISIBLE); TableRow.LayoutParams the_param; the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams(); the_param.span = 3; my_unidade.setLayoutParams(the_param); // Put the TextView in the TableRow the_ligne_unidade.addView(my_unidade);

El código parece estar bien pero, cuando alcanzas el init de "the_params", devuelve NULL.

En el otro extremo, este código funciona como un encanto:

TableRow the_ligne_unidade = new TableRow(this); the_ligne_unidade.setBackgroundColor(the_grey); TextView my_unidade = new TextView(this); my_unidade.setText(tsap_unidade_nom); my_unidade.setTextSize(20); my_unidade.setTypeface(null, Typeface.BOLD); my_unidade.setVisibility(View.VISIBLE); // Put the TextView in the TableRow the_ligne_unidade.addView(my_unidade); // And now, we change the SPAN TableRow.LayoutParams the_param; the_param = (TableRow.LayoutParams)my_unidade.getLayoutParams(); the_param.span = 3; my_unidade.setLayoutParams(the_param);

La única diferencia es que presiono Textview dentro de TableRow antes de establecer el lapso. Y en este caso, funciona. ¡Espero que esto ayude a alguien!


Parece que hay un atributo que hace eso: layout_span

ACTUALIZACIÓN: este atributo se debe aplicar a los elementos secundarios de TableRow. NO al TableRow en sí mismo.


Quizás esto ayudará a alguien. Intenté la solución con layout_span pero esto no funcionaba para mí. Así que resolví el problema con este truco. Solo use LinearLayout en lugar de TableRow donde necesita colspan, eso es todo.


Solo para completar la respuesta, el atributo layout_span se debe agregar al niño, no a TableRow.

Este fragmento muestra la tercera fila de mi tableLayout, que abarca 2 columnas.

<TableLayout> <TableRow android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="2" android:text="@string/create" /> </TableRow> </TableLayout>


use android: layout_span en el elemento hijo del elemento TableRow


Y así es como lo haces programáticamente

//theChild in this case is the child of TableRow TableRow.LayoutParams params = (TableRow.LayoutParams) theChild.getLayoutParams(); params.span = 2; //amount of columns you will span theChild.setLayoutParams(params);