2011-01-24 12 views
11

Estoy intentando hacer 4 botones espaciados uniformemente en una vista de retrato en Android.Botón espaciado uniformemente en el diseño

El espacio debe ampliarse y reducirse según el tamaño de la pantalla, con una cantidad uniforme de espacio entre cada botón y los bordes.

Intenté utilizar el diseño lineal, el peso y la gravedad del diseño, pero parece que no puedo centrar el botón verticalmente.

¿Es esto un error de diseño de Android? Más probablemente sea solo yo.

<?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> 

Respuesta

20

Pruebe algo como esto:

<?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> 

Los cambios de su diseño original son que cada LinearLayout interno tiene una altura de cero y una gravedad (no layout_gravity) de centro. Esto debería hacer que todos los diseños lineales internos tengan la misma altura, dividiendo uniformemente la altura principal, sin estirar los botones ellos mismos.

+1

De esta forma no funcionó ... pero si especificas tanto layout_gravity como gravedad como centro, funcionó .... para asegurarse de que la interfaz xml de Android está POBREMENTE documentada ... – Mascarpone

+0

Debe ser android: layout_gravity = "center" no android: gravedad = "centro". No es necesario usar android: gravity = "center" aquí. La etiqueta de gravedad afecta el posicionamiento de su contenido, mientras que la distribución de gravedad afecta el posicionamiento respecto de su elemento primario. – wooohoh

1

Usted parece ser envolver todos los botones en otra LinearLayout en lugar de simplemente mantenerlos en el padre LinearLayout.

Eliminar todos los inmediatos LinearLayout para que android:layout_weight surta efecto.


Para lograr el estiramiento y el espaciamiento

  • uso android:layout_width="fill_parent" en los mismos botones
  • especifique margen de separación
+0

esto simplemente estirar los botones ... Quiero que los botones sean pequeños con espacio a su alrededor ... cada uno en el centro de un rectángulo – Mascarpone

+2

Ver mi actualización por favor – Aliostad

+2

Especificar el margen es lo que quería evitar ... usted Es necesario poner una cota e incluso si está en caída, el efecto final no es el mismo en todas las pantallas ... ¿No hay una manera automática de subir de peso? – Mascarpone

3

Prueba esto:

<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> 

Esto establecerá el botón para ocupar sólo la mitad de la longitud de las pantallas.

+1

Esto estirará los botones sin embargo. – hadi

Cuestiones relacionadas