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 :

Les Layout par programmation se positionnent mal


Sujet :

Composants graphiques Android

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Les Layout par programmation se positionnent mal
    Bonjour à toutes et à tous,

    je cherche à créer par programmation des Layout placés les uns au-dessous des autres. pour cela, j'utilise l'instruction "addRule". Le deuxième paramètre de cette instruction est l'Id d'un autre Layout. Si pour cet Id, je prend celui d'un Layout créé dans le fichier .xml, ça fonctionne, la valeur de l'ID est par exemple : 2131099654

    Maintenant, si, comme dans la procédure qui suit, je prends l'Id du Layout précédemment créé, j'obtiens toujours -1, valeur donnée en passant le pointeur de la souris sur la valeur "k" en mode debug. Mais, si je déplace la souris sur "boite[i]", j'obtiens des valeurs du genre : 830031500544 !!! Cette valeur n'est plus un "int", mais un "long".

    En conclusion, je ne comprends pas, je ne sais pas ce qu'il faut faire pour avoir la valeur correcte de 'l'Id des layout que je crée par programmation.

    Merci de votre aide.

    Pierre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static RelativeLayout[] boitesEdit(int nbBoites) {
    	RelativeLayout boite [] = new RelativeLayout [nbBoites];
    	int k = 0;
    	for (int i = 0; i < nbBoites; i++) {
    		boite[i] = new RelativeLayout(context);
    		LayoutParams editionPrms = new LayoutParams(LayoutParams.MATCH_PARENT, 150); // Width , height
    		if (i != 0) {
    			k = boite[i-1].getId();
    		  editionPrms.addRule(RelativeLayout.BELOW, k);
    		}
    		boite[i].setLayoutParams(editionPrms);
    	}
    	return boite;
    }

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    En fouillant sur le net, j'ai trouvé une solution. Apparemment, la création dynamique d'un Layout ne lui affecte pas un Id. Donc on lui en affcte un par setId(un entier positif quelconque); puis on se sert de cet Id.

    Ça ne se devine pas tout seul .

    Bon, mais j'ai maintenant un autre problème : tous ces Layout, que j'ai placé dans un RelativeLayout, dépassent en taille celle de mon écran. J'aurai aimé pouvoir faire du scrolling pour voir ceux du bas. Ça ne fonctionne pas, même en appliquant les paramètres qui vont bien dans le fichier xml. J'ai changé le type de "espaceTexte" de RelativeLayout à ScrollView, et là, sans erreur à la compilation, ça plante au deuxième passage de la ligne 18 du code suivant :

    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
    public static RelativeLayout[] boitesEdit(int nbBoites) {
    	RelativeLayout boite [] = new RelativeLayout [nbBoites];
    	EditText edit [] = new EditText [nbBoites];
    	for (int i = 0; i < nbBoites; i++) {
    		boite[i] = new RelativeLayout(context);
    		boite[i].setId(1000+i);
    		LayoutParams boitePrms = new LayoutParams(LayoutParams.MATCH_PARENT, 150); // Width , height
    		boitePrms.setMargins(10, 10, 10, 0);
    		if (i != 0)
    			boitePrms.addRule(RelativeLayout.BELOW, boite[i-1].getId());
    		boite[i].setBackgroundColor(clSable);
    		boite[i].setLayoutParams(boitePrms);
    		edit[i] = new EditText(context);
    		LayoutParams editPrms = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); // Width , height
    		edit[i].setLayoutParams(editPrms);
    		edit[i].setGravity(Gravity.TOP);
    		boite[i].addView(edit[i]);
    		espaceTexte.addView(boite[i]); // espaceTexte est le conteneur de toutes les boites
    	}
    	return boite;
    }
    Des idées ?

    Cordialement.

    Pierre

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Le plantage du ScrollView venait du fait qu'il ne peut contenir qu'un seul Layout et que par principe, moi, j'en créais plusieurs. Comme il est dit dans la doc, j'ai rajouté un étage intermédiaire entre le ScrollView et mes divers Layout et c'est tout bon.

    Cordialement.

    Pierre

  4. #4
    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
    C'est moi ou il me semble que tu essayes de refaire le comportement d'une ListView ?

    ListView = ScrollView d'un LinearLayout dynamique de layouts créés dynamiquement
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par nicroman Voir le message
    C'est moi ou il me semble que tu essayes de refaire le comportement d'une ListView ?

    ListView = ScrollView d'un LinearLayout dynamique de layouts créés dynamiquement
    Oui, c'est vrai, ça va y ressembler fortement. J'essaie tout simplement de me faire une petite application "Mémo" dans laquelle, je peux écrire des données dans chacune des cases, en créer de nouvelles ou en supprimer.

    Je verrai si c'est transposable en ListView.

    Cordialement.

    Pierre

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

Discussions similaires

  1. Gérer les services W32 par programme
    Par Gugli dans le forum Delphi
    Réponses: 1
    Dernier message: 15/06/2007, 22h45
  2. Réponses: 2
    Dernier message: 12/06/2006, 11h51
  3. Gérer les évènements VBA par programmation
    Par gbuxo dans le forum VBA Access
    Réponses: 14
    Dernier message: 09/05/2006, 11h13
  4. Attacher les tables par programmation
    Par ahouba dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/05/2006, 18h29
  5. TMediaPlayer : masquer les boutons par programme
    Par gerardTar dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/07/2005, 22h15

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