2011-01-24 13 views
11

Sto provando a creare 4 pulsanti, equidistanti in una vista verticale su Android.Pulsante uniformemente spaziato nel layout

Lo spazio dovrebbe aumentare o diminuire in base alle dimensioni dello schermo, con uno spazio uniforme tra ciascun pulsante e i bordi.

Ho provato a utilizzare il layout lineare, il peso e la gravità del layout, ma sembra che non riesca a centrare il pulsante verticalmente.

Si tratta di un bug del layout di Android? Più probabilmente sono solo io.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/btn_f" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="btn_f" 
> 
</Button> 
</LinearLayout> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/btn_b" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="btn_b" 
> 
</Button> 
</LinearLayout> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/btn_a" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="btn_a" 
> 
</Button> 
</LinearLayout> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_weight="1" 
android:layout_gravity="center" 
> 
<Button 
android:id="@+id/settings" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Settings" 
> 
</Button> 
</LinearLayout> 
</LinearLayout> 

risposta

20

provare qualcosa di simile:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:orientation="vertical" 
     android:layout_weight="1" 
     android:gravity="center" 
     > 
     <Button 
      android:id="@+id/btn_f" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="btn_f" 
      /> 
    </LinearLayout> 
    <!-- etc --> 
</LinearLayout> 

Le modifiche rispetto al layout originale sono che ogni interno LinearLayout ha un'altezza pari a zero e una gravità (non layout_grave) del centro. Ciò dovrebbe far sì che tutti i layout lineari interni abbiano la stessa altezza, suddividendo uniformemente l'altezza del genitore, senza allungare i pulsanti stessi.

+1

In questo modo non ha funzionato ... ma se si specifica sia layout_gravity che gravità come centro ha funzionato .... di sicuro l'interfaccia android xml è POORLY documentata .... – Mascarpone

+0

Dovrebbe essere Android: layout_gravity = "center" non Android: gravità = "centro". Non è necessario usare Android: gravità = "centro" qui. il tag gravità agisce sul posizionamento del suo contenuto mentre layout_gravity influisce sul posizionamento stesso rispetto al suo genitore. – wooohoh

1

Sembra che tu stia avvolgendo tutti i pulsanti in un'altra LinearLayout invece di tenerli nel genitore LinearLayout.

Rimuovere tutti quelli immediati LinearLayout in modo che android:layout_weight abbia effetto.


Per ottenere lo stretching e la spaziatura

  • uso android:layout_width="fill_parent" nei pulsanti stessi
  • specificare il margine per la spaziatura
+0

questo semplicemente allunga i pulsanti ... Voglio che i pulsanti siano piccoli con lo spazio intorno a loro ... ciascuno al centro di un rettangolo – Mascarpone

+2

Vedere il mio aggiornamento per favore – Aliostad

+2

Specificare margine è quello che volevo evitare ... tu bisogno di mettere una dimensione e anche se è in dip l'effetto finale non è lo stesso su ogni display ... non c'è un modo automatico come con il peso? – Mascarpone

3

Prova questo:

<LinearLayout   
    android:layout_width="wrap_content"   
    android:layout_height="0dp"   
    android:orientation="horizontal"   
    android:weightSum="1"   
    android:gravity="center"> 
    <Button    
     android:id="@+id/btn_f"  
     android:layout_width="0dp" 
     android:layout_weight="0.5" 
     android:layout_height="wrap_content"  
     android:text="btn_f" />  
</LinearLayout> 

Questo imposterà il pulsante di occupare solo la metà della lunghezza schermi.

+1

Questo allungherà i pulsanti però. – hadi

Problemi correlati