web-dev-qa-db-fra.com

Quel est l'équivalent de "colspan" dans un Android TableLayout?

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?

127
Spike Williams

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.

188
Sephy

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>
87
Maragues

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

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>
25
Raghavendra

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.

5
Dimanoid

utiliser Android: layout_span dans l'élément enfant de l'élément TableRow

3
Mosiur

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!

1
Peter

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.

0
RobGThai