2010-11-24 12 views
4

Puisque je suis encore en train d'apprendre Android (et il semble qu'Amazon dise que ça va prendre 2 mois avant que j'obtienne le livre Hello, Android) je suis toujours en train de jouer avec des choses simples. Je n'ai aucun problème pour obtenir une icône à afficher avec le clic d'un bouton sur mon RelativeLayout en utilisant ImageView. Le code pour la création, il est comme suit:Ajouter dynamiquement du contenu à RelativeLayout

private int mIconIdCounter = 1; 
private ImageView addIcon(){ 
    ImageView item = new ImageView(this); 
    item.setImageResource(R.drawable.tiles); 
    item.setAdjustViewBounds(true); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    if(mIconIdCounter != 1){ 
     params.addRule(RelativeLayout.RIGHT_OF, 1); 
    } 
    item.setLayoutParams(params); 
    item.setId(mIconIdCounter); 
    ++m_IconIdCounter; 
    return item; 
} 

et le code pour ajouter l'article est:

Button addButton = (Button)findViewById(R.id.add_new); 
addButton.setOnClickListener(new OnClickListener(){ 
    @Override 
    public void onClick(View view) { 
     addContentView(addIcon(), new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } 
}); 

Lorsque je clique sur mon bouton ce qui se passe est toutes les vues nouvellement créées sont placées au sommet d'une autre . J'aimerais qu'ils soient placés à la droite de l'élément suivant. J'ai fait une recherche rapide sur SO pour les articles relatifs à RelativeLayout et trouvé certains qui étaient similaires (here, here, here, et here) mais tandis que ceux-ci adressés obtenant le contenu dans le RelativeView ils ne semblaient pas adresser l'aspect de positionnement.

Qu'est-ce que je fais mal?

EDIT:

Mon principal xml ressemble:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button 
     android:id="@+id/add_new" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/add_new" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 

Répondre

8

Il semble que vous pourriez ajouterez la vue à la racine de la mise en page XML au lieu du RelativeLayout.

Vous pouvez essayer:

RelativeLayout layout = (RelativeLayout)findViewById(R.id.my_layout); 
layout.addView(addIcon()); 
+0

Donc, si mon fichier XML principal n'est rien de plus qu'un RelativeLayout et un Button, comment y accéder? Tout comme (R.id.main)? Je vais mettre à jour ma question pour vous montrer. – wheaties

+0

vous devez donner à votre relativelayout un ID avec android: id = "+ @ id/my_layout". Ensuite, vous pouvez utiliser votre mise en page dans votre code. afin que vous puissiez y ajouter des vues. espérons que cela aide! – Knossos

+0

pas de problème. heureux d'avoir pu aider. – Knossos

0

vous créez une nouvelle disposition relative à l'intérieur de l'appel de fonction. Donc, chaque fois que la nouvelle mise en page relative créé et ajouté dans la vue lorsque vous cliquez sur le bouton. Utilisez une disposition relative commune.

+1

il crée de nouveaux paramètres de mise en page à chaque fois, pas une nouvelle mise en page. c'est l'addContentView qui est le problème. – techiServices

Questions connexes