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

Android Discussion :

Comment positionner une relativeLayout xml en dessous d'une relativeLayout crée dynamiquement


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut Comment positionner une relativeLayout xml en dessous d'une relativeLayout crée dynamiquement
    Bonsoir à tous,

    J'ai un layout qui comprend une RelativeView.
    En raisons de contrainte techniques j'étais amené à créer des vues de façon dynamique et l'ajouter à ma relativeView

    Maintenant ce que je souhaiterai réaliser c'est positionner une RelativeLayout en xml en dessous de celle que j'ai crée, or lorsque je position en xml mon RelativeLayout au runTime le positionnement ne se fait pas correctement.

    Layout code XML:
    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
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
     
        <RelativeLayout
            android:id="@+id/container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
     
            <RelativeLayout
                android:id="@+id/container_imge_product"
                android:layout_width="200dp"
                android:layout_height="300dp"
                android:layout_below="@+id/h1_title_detail_commande"
                android:layout_centerHorizontal="true"
                android:background="@drawable/corner_layout_orange" >
            </RelativeLayout>
     
          <RelativeLayout
                android:id="@+id/na"
                android:layout_width="222dp"
                android:layout_height="200dp"
                android:layout_below="@+id/container_imge_product"
                android:background="@drawable/corner_layout_orange" >
            </RelativeLayout> 
        </RelativeLayout>
     
    </ScrollView>
    Code Java:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            RelativeLayout relativeLayout = (RelativeLayout)findViewById(R.id.container_imge_product);
            relativeLayout.setId(1);
            relativeLayout.setPadding(20, 20, 20, 20);
     
            for (int i = 0; i <3; i++) {
                RelativeLayout firstLayout = new RelativeLayout(this);
                RelativeLayout.LayoutParams firstLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
                firstLayout.setId(1 +i);
                firstLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
     
                	firstLayoutParams.addRule(RelativeLayout.BELOW, firstLayout.getId() -1);
                	firstLayoutParams.setMargins(0, 20, 0, 0);
                	firstLayoutParams.addRule(RelativeLayout.ALIGN_LEFT, firstLayout.getId() -1);
     
     
     
                firstLayout.setLayoutParams(firstLayoutParams);
     
                ImageView imageView = new ImageView(this);
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.play_station_4));
                RelativeLayout.LayoutParams imageViewParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
                imageView.setId(1);
                imageViewParams.addRule(RelativeLayout.ALIGN_LEFT);
                imageViewParams.addRule(RelativeLayout.ALIGN_TOP);
                imageView.setLayoutParams(imageViewParams);
     
     
                TextView title_txt = new TextView(this);
                RelativeLayout.LayoutParams title_txtParams = new RelativeLayout.LayoutParams(250,RelativeLayout.LayoutParams.WRAP_CONTENT);
                title_txtParams.addRule(RelativeLayout.RIGHT_OF, imageView.getId());
                title_txtParams.addRule(RelativeLayout.ALIGN_TOP);
                title_txt.setId(8);
                title_txt.setLayoutParams(title_txtParams);
                title_txtParams.setMargins(10, 0, 0, 0);
                title_txt.setText("Sisley Chantal, sac porté main - Noir (Black, Taille unique)");
     
                TextView price_txt = new TextView(this);
                RelativeLayout.LayoutParams price_txtParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
                price_txtParams.addRule(RelativeLayout.RIGHT_OF, title_txt.getId());
                price_txtParams.addRule(RelativeLayout.ALIGN_TOP);
                price_txt.setId(5);
                price_txt.setLayoutParams(price_txtParams);
                price_txtParams.setMargins(20, 0, 0, 0);
                price_txt.setText("EUR 75,00");
     
     
                TextView quantity_txt = new TextView(this);
                RelativeLayout.LayoutParams quantity_txtParams = new RelativeLayout.LayoutParams(50,50);
                quantity_txtParams.addRule(RelativeLayout.ALIGN_LEFT,title_txt.getId());
                quantity_txtParams.addRule(RelativeLayout.BELOW, title_txt.getId());
                quantity_txt.setId(54);
                quantity_txt.setLayoutParams(quantity_txtParams);
                quantity_txtParams.setMargins(10, 10, 0, 0);
                quantity_txt.setText("2");
     
     
                firstLayout.addView(quantity_txt);
                firstLayout.addView(title_txt);
                firstLayout.addView(price_txt);
                firstLayout.addView(imageView);
     
     
                relativeLayout.addView(firstLayout, firstLayoutParams);
    		}
     
        }

    Comment vous pouvez le voir le layout portant l'id na se positionne tout en haut, alors qu'il devrait se positionner en dessous du layout container_imge_product.

    J'ai ensuite testé le même scénario en code, c'est à dire que j'ai crée le layout na en java et cette fois j'ai réussi à placer correctement mon layout na en dessous de container_imge_product.
    Dois t-on créer tout le layout en dynamique ?

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Android
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Salut,

    je ne pense pas que tu es besoin de créer le tout en dynamique.

    As-tu essayer @id à la place de @+id lors de l'affectation des layout_below dans le xml ?

    +id c'est pour ajouter un nouvel identifiant, le problème vient peut-être de là (alors que dans le code tu fait un getId() donc le problème se pose pas).

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    En faisant ce que tu m'a dit, rien ne change. Hmm j'enquête un peu plus sur ce problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <RelativeLayout
                android:id="@+id/na"
                android:layout_width="222dp"
                android:layout_height="200dp"
                android:layout_below="@id/container_imge_product"
                android:background="@drawable/corner_layout_orange" >
     
            </RelativeLayout>

  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
    Il faut utiliser les LayoutParams de la manière suivante. Attention, ce qui suit suppose que toutes le déclarations et créations d'objet ont été faits au préalable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    LayoutParams lPrms;
    ...
    RelativeLayout xmlRelLayout;
    RelativeLayout dynamicLayout;
    ...
    lPrms.addrule(RelativeLayout.BELOW, dynamicLayout.getId());
    xmlRelLayout.setLayoutParams(lPrms);
    Cordialement.

    Pierre

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Android
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Il semble que ton code Java réaffectes un id ici pour container_imge_product :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RelativeLayout relativeLayout = (RelativeLayout)findViewById(R.id.container_imge_product);
    relativeLayout.setId(1);
    ors il en avait déjà eu un dans le xml, c'est peut-être la cause problème.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    Bonjour à vous tous,
    J'en profites pour vous souhaiter à tous une excellente année.

    Merci Flarin, c'est exactement ça le problème, le fait que j'attribuais un id une nouvelle fois faisait planter le positionnement.
    Problème résolu !

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

Discussions similaires

  1. Insérer une ligne juste en dessous d'une cellule
    Par MInfo25 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2013, 22h03
  2. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  3. [SGBDR] [mysql] creation d'une bd a l'aide d'une fichier XML
    Par moukit233 dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 17/09/2010, 10h37
  4. Réponses: 3
    Dernier message: 02/11/2009, 17h29
  5. Comment importer un fichier xml ou csv dans une table paradox ?
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/09/2007, 15h35

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