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 :

Ajouter layout dynamiquement à un layout XML


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 101
    Par défaut Ajouter layout dynamiquement à un layout XML
    Bonjour,

    (je débute sous android)
    J'ai un relativeLayout décrit en XML. Dans le onCreate d'une activité j'utilise ce layout (setContentView) puis je souhaites le compléter avec d'autres layout de manière dynamique.
    Le problème est que le positionnement (RelativeLayout.BELOW) des mes subLayout ne fonctionne pas : ni entre eux ni vis à vis du layout principal, ils sont tous les un sur les autres au lieu d'être les un sous les autres.
    (le layout principale contient plusieurs components qui sont eux bien agencés).

    Après quelques heures de recherche je sèche...
    Voici le code de l'activity, si qqu vois le pb (ou une autre façon de faire), merci :

    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
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main_layout);
     
            int belowId = R.id.pays;
            belowId = addSubLayout(belowId);
            belowId = addSubLayout(belowId);
            belowId = addSubLayout(belowId);
    }
     
    private void addSubLayout(int belowId) {
    	int newId = View.generateViewId();
     
    	EditText txtField = new EditText(this);
            txtField.setHint(String.valueOf(newId));
            txtField.setId(newId);
     
    	RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    	lp.addRule(RelativeLayout.BELOW, belowId);
     
    	ContentFrameLayout layout = (ContentFrameLayout)findViewById(android.R.id.content);
            layout.addView(txtField, lp);
    }

  2. #2
    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
    Pourquoi ne pas utiliser un LinearLayout plutot qu'un RelativeLayout ?

    D'autant qu'à priori il va y avoir soucis dès qu'il faudra scroller...

    RelativeLayout
    * ScrollLayout
    * LinearLayout
    ^= tu rajoutes ici.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 101
    Par défaut
    Effectivement ça sera nécessaire de pouvoir scroller.
    Je vais déjà refaire l'ensemble de manière programmatique uniquement, c'est sans doute ma façon de mixer le XML et le prog qui ne va pas.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 101
    Par défaut
    j'ai avancé :

    je n'ajoute pas les sous-layouts au bon layout.

    J'utilisais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findViewById(android.R.id.content)
    mais ça ne pointe pas sur le layout courant comme je pensais.

    Donc j'ai nommé explicitement mon relativeLayout dans le XML via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:id="@+id/layout_master"
    puis dans le code pour ajouter les sous-layouts je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout_master);
    layout.addView(txtField, lp);
    mais ça me donne un nullPointer car le layout est null...
    savez-vous pourquoi il ne trouve pas le layout ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 101
    Par défaut
    Finalement oubliez ma dernière question, dans ma classe de test j'avais fait plusieurs essais et le setContentView n'était plus positionné avant findViewById, d'où le nullpointer.

    En conclusion si ça peut servir à qqu, le pb venait de
    findViewById(android.R.id.content)
    qui ne retourne pas le "dernier" layout mais le root layout. Donc à la place il faut donner un id au layout qui nous intéresse et le rechercher via
    findViewById(R.id.le_dernier_layout)
    .

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/04/2010, 20h34
  2. [Dojo] Créer dynamiquement un layout pour Grid
    Par okilele dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 31/08/2009, 11h11
  3. Réponses: 2
    Dernier message: 21/08/2009, 21h28
  4. ajouter un QString à un layout
    Par sofdev dans le forum Débuter
    Réponses: 6
    Dernier message: 03/07/2008, 11h10
  5. [GridLayout] Layout dynamique
    Par mister3957 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/10/2005, 09h51

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