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 :

Problème de création de tableau de boutons


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Problème de création de tableau de boutons
    Bonjour à toutes et à tous,

    Dans une application, je souhaite créer un tableau de boutons dans un RelativeLayout (affBibliOpe). Il devraient être répartis en deux colonnes et 4 rangées. Le problème est qu'ils sont tous l'un sur l'autre et que leurs dimensions n'ont rien à voir avec celles (80 x 80) que je souhaiterait qu'ils aient. Voici le code que j'ai fait :

    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
            View.OnClickListener listener = new View.OnClickListener() { // Click sur un des ImageButton
                @Override
                public void onClick(View v) {
                    noBtn = (Integer) v.getTag();
    /*                for (int j = 0; j < 8; j++)
                        for (int i = 0; i < 2; i++) {
                        }*/
                }
            };
     
            final Button[][] img = new Button[8][2]; // Création d'un tableau pour 16 ImageButton
            for (int j = 0; j < 4; j++)
                for (int i = 0; i < 2; i++) {
                    img[j][i] = new Button(this); // Création des 16 ImageButton
                    img[j][i].setLeft(20 + 100 * i);
                    img[j][i].setRight(100 + 100 * i);
                    img[j][i].setTop(20 + 100 * j);
                    img[j][i].setBottom(100 + 100 * j);
                    img[j][i].setTag(btnNum++);
                    img[j][i].setOnClickListener(listener); // Affectation  du listener aux ImageButton
                    affBibliOpe.addView(img[j][i]);
                }
    Où est le problème ?

    Merci de votre aide.

    Pierre

  2. #2
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Bon, j'ai trouvé la solution :

    il faut utiliser setX et setY pour le placement
    il faut utiliser les LayoutParams pour le dimensionnement

    Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            final Button[][] img = new Button[5][2]; // Création d'un tableau pour 10 Button
            RelativeLayout.LayoutParams btnPrms = new RelativeLayout.LayoutParams(80, 80);
            for (int j = 0; j < 5; j++)
                for (int i = 0; i < 2; i++) {
                    img[j][i] = new Button(this);
                    img[j][i].setX(20 + 80 * i);
                    img[j][i].setY(20 + 80 * j);
                    img[j][i].setLayoutParams(btnPrms);
                    img[j][i].setOnClickListener(listener); // Affectation  du listener aux ImageButton
                    affBibliOpe.addView(img[j][i]);
                }
    par contre, je me demande bien à quoi peuvent servir les setLeft, setTop, setRight, st Bottom, setWidth, setHeight, setMinWidth, setMaxWidth, ... je les ai essayés, il ne font rien !

    Cordialement.

    Pierre

  3. #3
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    si... les fonctions sont utilisées par n'importe quel ViewGroup (comme un Layout) qui contient la View et qui désire positionner celle-ci pendant son "onMeasure".

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Si j'ai bien compris (tu me l'avais expliqué dans un autre fil) ces méthodes de positionnement sont utilisées par "le système" pour connaître le besoin utilisateur. Mais après, "le système" arrange ça à sa sauce. Ces méthodes devraient s'appeler "whatIsYourNeedFor" ou "WeShallTryToDoWhatYouExpectToDo" .Bon, je plaisante.

    Cordialement.

    Pierre

  5. #5
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Pas que le système...

    Imaginons que *je* développe un ViewGroup à ma sauce... (par exemple un layout qui affiche ses enfants sous forme circulaire), à un moment le parent va me demander quelle est ma taille...
    Hors ma taille va dépendre de mes enfants, donc je vais demander leurs tailles à mes enfants et fournir au parent la taille préférée / minimal / maximal que je peux avoir.
    Le parent va alors me positionner (appeler mes setLeft/setTop/setRight/setBottom)... et me demander d'en faire de même avec mes enfants.

    Donc oui ces fonctions sont bien appelées par le système indirectement, mais dans ce cas au même titre que *toutes* les fonctions du framework.

    Dans tous les cas ces fonctions (d'une vue X) sont appelées au moment du "layout" par le parent de cette view X quand ce parent aura toutes les informations pour bien positionner la view.
    Donc appeler soit-même ces fonctions hors de ce cheminement est voué à l'échec.

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Je pense que je vais avoir un problème un peu semblable. Dans mon application, je vais placer différents opérateurs que je relierai par des segments de droite. (voir cette application que j'avais créée sous Windows et Linux). Or pour ce faire, il me faut de la place entre les opérateurs. Si je les place n'importe comment, c'est-à-dire sur ce que moi je décide, ça risque de ne pas marcher. Je vais peut-être être amené à demander au "système", c'est-à dire mon application, de réaménager les opérateurs entre eux pour qu'il y ait de la place pour faire les liaisons. C'est un peu semblable à la problématique que tu me décris.

    Cordialement.

    Pierre

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/09/2012, 20h12
  2. Problème de création d'un tableau
    Par fog4000 dans le forum LabVIEW
    Réponses: 7
    Dernier message: 04/06/2007, 14h53
  3. Réponses: 3
    Dernier message: 11/06/2006, 19h03
  4. [Débutant] Problème de création et de remplissage de tableau
    Par pinggu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 24/05/2006, 15h50

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