Création de TableLayout par programmation

j'essaie de créer un TableLayout programmatiquement. Il juste ne fonctionnera pas. La même mise en page dans un fichier xml fonctionne bien. C'est ce que j'ai:

public class MyTable extends TableLayout
{
    public MyTable(Context context) {
        super(context);

        setLayoutParams(new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        TableRow row = new TableRow(context);
        row.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

        Button b = new Button(getContext());
        b.setText("hello");
        b.setLayoutParams(new LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
        row.addView(b); 
        addView(row)
    }
}

...

// In main activity:
MyTable table = new MyTable(this);
mainLayout.addView(table);

quand je dirige ça, je n'ai pas de crash, mais rien n'apparaît. Si je me débarrasse de L'instance TableRow, au moins le bouton apparaît comme un enfant direct du TableLayout. Ce que je fais mal?

24
demandé sur Cœur 2009-10-07 05:02:49

5 réponses

Juste pour rendre la réponse plus claire:

TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT);
TableRow.LayoutParams rowParams = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);

TableLayout tableLayout = new TableLayout(context);
tableLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));// assuming the parent view is a LinearLayout

TableRow tableRow = new TableRow(context);
tableRow.setLayoutParams(tableParams);// TableLayout is the parent view

TextView textView = new TextView(context);
textView.setLayoutParams(rowParams);// TableRow is the parent view

tableRow.addView(textView);

explication

Lorsque vous appelez setLayoutParams , vous êtes censé passer le LayoutParams de la vue parent

32
répondu Grigori A. 2016-11-09 20:09:29

il s'avère que j'ai dû spécifier TableRowLayout, TableLayout etc pour les paramètres de mise en page, sinon la table ne s'affichera tout simplement pas!

6
répondu mark 2009-10-07 01:28:33

une bonne solution est de gonfler les fichiers de mise en page pour chaque instance de ligne que vous voulez créer. Voir ce post: comment dupliquer des vues pour peupler des listes et des tables?

1
répondu clotilde 2017-05-23 11:46:48

Pour moi, pour obtenir le mien j'ai dû appeler addContentView() .

0
répondu John Moses 2012-06-21 15:51:16

votre problème est à cette ligne:

b.setLayoutParams(new LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));

vous devez changer LayoutParams en TableRow.LayoutParams :

b.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
0
répondu ericn 2016-11-09 06:46:55