2010-02-14 3 views
1

Je construis une pyramide de boutons et je veux que la taille de la pyramide puisse changer dynamiquement. Pour ce faire, j'ai des fichiers XML extrêmement basiques représentant l'activité, chaque ligne de l'activité et chaque bouton. Je modélise la solution de la réponse acceptée au this question. La pyramide se construit correctement, mais la largeur du bouton 50dip n'est pas respectée. Des idées pourquoi? Existe-t-il une meilleure façon de le faire?Android LayoutWidth étant ignoré par l'utilisation en cascade de LayoutInflater

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pyramid" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_horizontal" 
/> 

row.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/row" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:gravity="center_horizontal"/> 

btn.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/button" 
     android:layout_width="50dip" 
     android:layout_height="wrap_content"/> 

Activité principale:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    inflate(); 
    } 
private void inflate() { 
    LinearLayout pyramidLayout = (LinearLayout) findViewById(R.id.pyramid); 

    for (int row = 1 ; row <= mSize; ++row) { 
     View rowView = getLayoutInflater().inflate(R.layout.row, null); 
     LinearLayout rowLayout = (LinearLayout) rowView.findViewById(R.id.row); 
     for (int column = 1; column <= row; ++column) { 
      View btnView = getLayoutInflater().inflate(R.layout.btn, null); 
      Button btn = (Button) btnView.findViewById(R.id.button); 
      btn.setId(row*10 + column); 
      rowLayout.addView(btnView); 
     } 
     pyramidLayout.addView(rowView); 
    } 
} 

Répondre

2

En btn.xml, modifiez layout_width = "50dip" à width = "50dip".

+0

ouais, c'est tout ce que c'était. Merci – RickNotFred

+0

Great Rick, explication parfaite. Je ne peux pas avoir l'inflation dynamique. Et maintenant ça marche !! réservoirs – Sephy

0

Merci pour ce tutoriel. Ça m'aide vraiment :) Dans mon cas, j'ai une vue (2 textes, 1 image, 1 bouton) qui représente 1 résultat. Lorsque l'utilisateur clique sur "rechercher", je dois l'afficher plusieurs fois. Donc, votre exemple était perferct pour moi

Questions connexes