2012-10-26 14 views
5

Voglio generare automaticamente i pulsanti verticalmente con un margine inferiore di 20 pixel tra i pulsanti. Provo a impostare il margine con un oggetto LayoutParams, senza successo.android: imposta il margine tra i pulsanti con LayoutParams

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



@Override 
public void onCreate(Bundle savedInstanceState) { 

    ... 

    for (Region region : regionsList) { 

     //create new button  
     Button button = new Button(mContext); 

     //set infos 
     int id = Integer.parseInt(Long.toString((Long) region.getId()));  button.setId(id); 
     button.setText(region.getName() + "(" + region.getStores_nb() + ")"); 

     //Layoutparams setting 
     FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
     params.setMargins(0, 0, 0, 20); 

     button.setLayoutParams(params); 

     myLinear.addView(button); 

     } 

Come si può vedere sull'immagine, non c'è spazio tra le immagini. Qualcuno sa perché? Grazie! enter image description here

+0

Perché usare FrameLayout? Il file XML è in LinearLayout. –

+0

Fatto, grazie – johann

risposta

9

Si può provare questo:

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) button.getLayoutParams(); 
layoutParams.bottomMargin += 20; 
button.setLayoutParams(layoutParams); 
+0

Grazie! Tutti voi mi date la stessa risposta, ma siete stati i primi a postare! Grazie ~ – johann

+0

In realtà penso che Nunu sia stato il primo;) .. ma grazie – Cata

+0

per favore guarda questo http://stackoverflow.com/questions/16552811/set-a-margin-between-two-buttons-programmatically-from- a-LinearLayout? noredirect = 1 # comment23779639_16552811 – Dimitri

2

tenta di utilizzare LinearLayout.LayoutParams invece di FrameLayout.LayoutParams, come nel tuo XML si utilizza LinearLayout ..

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
+1

Cata era più veloce di te, mi dispiace. Grazie per il vostro aiuto – johann