IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Layout Dynamique : texte et bouton dans un tablerow


Sujet :

Composants graphiques Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut Layout Dynamique : texte et bouton dans un tablerow
    Re-bonjour.
    Décidément, je passe régulièrement sur le forum ces temps-ci, et j'espère que je n'abuse pas trop de votre aide.

    J'ai donc suivis le tutoriel de cette communauté pour créer une vue dynamique.
    Ça fonctionne correctement, jusqu'à un petit point : j'ai du mal à "encastrer" mes éléments dans un TableRow.
    J'ai besoin de mettre un bouton puis un texte dans un TableRow pour qu'ils soient correctement alignés.
    Je vous ai mis le code de mon avancement ci-dessous.
    J'ai essayé d'autres "combinaisons" (par exemple, instancier le texte et le bouton avec le context du TableRow) mais en vain.


    Merci d'avance encore une fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    		//***** Définition du Layout à construire *****//
    		LinearLayout dynamiqueLayout = new LinearLayout(this);
     
    		dynamiqueLayout.setOrientation(LinearLayout.VERTICAL);
     
    		// Paramètres du layout
    		LinearLayout.LayoutParams textParam = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    		LinearLayout.LayoutParams tableParam = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
     
     
    		// construction dynamique de la vue, selon les absents
    		for (int i = 0; i < nbAbsents; i++)
    		{
    			TableRow table = new TableRow(this);
     
     
    			Button btAbsent = new Button(this);
    			btAbsent.setText("X");
     
    			TextView textAbsent = new TextView(this);
    			textAbsent.setText(tabAbsents_name[i]);
     
     
    			table.addView(btAbsent, textParam);
    			table.addView(textAbsent, textParam);
    			dynamiqueLayout.addView(table, tableParam);
    		}
     
    		setContentView(dynamiqueLayout);

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Pour que TableRow soit compris correctement, ne faut-il pas l'ajouter à un TableLayout ?

    La c'est un simple LinearLayout, qui va faire comme n'importe quel linear-layout, prendre les éléments un par un....

    En utilisant les resources (plutot que de définir des LayoutParams par code):

    XML "MainLayout":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <LinearLayout>
        ... whatever
       <TableLayout id="@+id/my_table">
       </TableLayout>
    </LinearLayout>
    XML "MainRow"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <TableRow>
        <Button id="@+id/button">
        <TextView id="@android:id/text1">
    </TableRow>
    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    onCreate(...)
    {
        setContentView(R.layout.MainLayout);
     
        LayoutInflater inflater = getLayoutInflater();
        TableLayout table = (TableLayout) findViewById(R.id.my_table);
        for ( ... each row to insert ...) {
            TableRow tr = inflater.inflate(R.layout.MainRow);
            ((Button)tr.findViewById(R.id.button)).setText("X");
            ((TextView)tr.findViewById(android.R.id.text1).setText("....");
            table.add(tr);
        }
    }
    Ca permet de modifier simplement dans les XML le résultat final (à cout de weights)....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Étrange, dans une autre vue, non dynamique, j'ai aussi utilisé des TableRow avec des boutons et textes à l'intérieur mais je n'utilisais pas de TableLayout.

    Mais je vais quand même essayé.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Alors, j'ai essayé le tout. Je ne connaissais pas du tout les "inflater" avant, mais ça à l'air pratique.
    Du coup, j'ai peut-être fait une bêtise dans le code, mais je ne trouve pas.

    L'application plante lors de l’exécution de la ligne 16 : TableRow tr = (TableRow) inflater.inflate(R.layout.recap_tablerow, table);

    Il manquait un paramètre à la méthode inflate. J'ai trouvé logique de mettre "table", correspondant au TableLayout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public void onCreate(Bundle savedInstanceState)
    {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.recap);
     
    		...
     
    		LayoutInflater inflater = getLayoutInflater();
    		TableLayout table = (TableLayout) findViewById(R.id.tableLayoutRecap);
     
     
    		// construction dynamique de la vue, selon les absents
    		for (int i = 0; i < nbAbsents; i++)
    		{
     
    			TableRow tr = (TableRow) inflater.inflate(R.layout.recap_tablerow, table); // problème
     
    			((TextView) tr.findViewById(R.id.textRecapAbsent)).setText(tabAbsents_name.get(i));
     
    			table.addView(tr);
     
    		}
    }
    Code recap.xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
        ...
     
        <TableLayout
            android:id="@+id/tableLayoutRecap"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
        </TableLayout>
     
        ...
     
    </LinearLayout>

    Code recap_tablerow.xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="utf-8"?>
    <TableRow xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
     
        <Button
            android:id="@+id/btRecapAbsent"
            android:layout_width="45dp"
            android:layout_height="wrap_content"
            android:text="X"
            android:textColor="#F00"
            android:textStyle="bold" />
     
        <TextView 
            android:id="@+id/textRecapAbsent"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" />
     
    </TableRow>

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Ok, l'erreur venait simplement du faire qu'un paramètre n'était pas bon sur cette ligne. Il fallait mettre null.
    Un bout de temps de perdu pour si peu ^^

    >>> TableRow tr = (TableRow) inflater.inflate(R.layout.recap_tablerow, null);

    Finalement, ça marche bien. J'ai réussi à faire un évènement plus ou moins différent lorsqu'on clique sur un des boutons dynamiques, et j'ai même intégré un scroll vertical, au cas où =)


    Bref, merci pour ton aide précieuse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel layout pour organiser mes boutons dans une JFrame ?
    Par zangaloni dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 31/03/2009, 17h44
  2. [E-07] Création dynamique d'un bouton dans un graphique
    Par Harry Covair dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/02/2009, 06h55
  3. Texte des boutons dans le document
    Par DPhBxl dans le forum VBA Word
    Réponses: 1
    Dernier message: 25/08/2008, 13h09
  4. [C#] Modifier le text des boutons dans un datagrid
    Par Le-Cortex dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/01/2006, 11h17
  5. [CSS]problème centrage texte de bouton dans une boîte
    Par Aurelius dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 06/09/2005, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo