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);