J'utilise un TableLayout dans Android. À l’heure actuelle, j’ai un tableau avec deux éléments et, en dessous, un tableau avec un seul élément. Cela rend comme ceci:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
---------------
Ce que je veux faire est de faire en sorte que la cellule 3 s’étende sur les deux cellules supérieures, elle ressemble donc à ceci:
-----------------------------
| Cell 1 | Cell 2 |
-----------------------------
| Cell 3 |
-----------------------------
En HTML, je voudrais utiliser un COLSPAN .... comment puis-je faire fonctionner cela dans Android?
Il semble qu’il existe un attribut faisant cela: layout_span
UPDATE: cet attribut doit être appliqué aux enfants de TableRow. PAS à la TableRow elle-même.
Juste pour compléter la réponse, l'attribut layout_span doit être ajouté à l'enfant, pas à TableRow.
Cet extrait montre la troisième ligne de ma tableLayout, qui couvre 2 colonnes.
<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>
Et voici comment vous le faites par programme
//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);
Vous devez utiliser layout_weight pour remplir la ligne entière, sinon elle remplit toujours la colonne de gauche ou de droite de la présentation du tableau.
<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>
Cela aidera peut-être quelqu'un. J'ai essayé la solution avec layout_span
mais cela ne fonctionne pas pour moi. J'ai donc résolu le problème avec cette astuce. Utilisez simplement LinearLayout
à la place de TableRow
où vous avez besoin de colspan, c'est tout.
utiliser Android: layout_span dans l'élément enfant de l'élément TableRow
J'ai eu quelques problèmes avec rowspan, dans le cas de TableRow, Textview, etc., généré avec du code. Même si la réponse de Onimush semble bonne, cela ne fonctionne pas avec l'interface utilisateur générée.
Voici un morceau de code qui .... ne fonctionne pas:
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);
Le code semble être correct, mais lorsque vous atteignez le début de "the_params", il renvoie NULL.
À l’autre bout, ce code fonctionne à merveille:
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 seule différence est que je pousse la vue de texte à l'intérieur du tableau avant de définir la plage. Et dans ce cas, ça marche. J'espère que cela aidera quelqu'un!
Je pense que vous devez envelopper une mise en page autour d'une autre. Avoir une liste de mise en page verticalement, à l'intérieur d'une autre (ou dans ce cas, deux) liste horizontalement.
Je trouve toujours difficile de scinder joliment l'interface à une portion de 50 à 50 d'Android.