2011-07-27 25 views
16

Tengo un problema con LinearLayout en Android. Tengo cuatro botones. Cada botón tiene un tamaño fijo, pero el texto puede variar en longitud.LinearLayout: no se alinea verticalmente

Mi problema es que no se alinean con la parte superior de cada uno. Se ve que se alinean con la parte superior del texto dentro de cada botón que cambia dependiendo de la cantidad de líneas que hay dentro del botón (Ver imagen).

Además, quiero seguir usando LinearLayout, ya que eventualmente usaré el código para agregar botones basados ​​en datos de una base de datos.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
     <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> 
      <Button android:text="Line1 Line2" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
      <Button android:text="Line1 Line2 Line3" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
      <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
      <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
     </LinearLayout> 

</LinearLayout> 

http://i.imgur.com/0Kj8h.png

EDIT: RESPUESTA (No se puede responder a mi propia pregunta):

Ok, acabo de encontrar la respuesta por mí mismo. Tienes que agregar android: baselineAligned = "false" a LinearLayout o cualquier otro control similar que pueda mostrar el mismo comportamiento.

También puede solucionar esto en el diseñador de IU con el botón denominado "Alternar alineación de línea base".

Así que el código resultante es:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
     <LinearLayout android:baselineAligned="false" android:layout_width="match_parent" android:layout_height="match_parent"> 
      <Button android:text="Line1 Line2" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
      <Button android:text="Line1 Line2 Line3" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
      <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
      <Button android:text="Line1" android:textSize="30dp" android:layout_width="160dp" android:layout_height="120dp"></Button> 
     </LinearLayout> 

</LinearLayout> 
+0

Gracias por el consejo sobre android: baselineAligned = "false", solucionó mi problema también :-) –

Respuesta

0

bien su segundo trazado lineal se cuál está creando el problema supongo que para u, simplemente eliminar ese

+0

Necesito mantenerlo ya que habrá otras cosas a su alrededor, como un título, pero es un buen punto. – darkzangel

1

que es mejor usar RelativeLayout para tal tipo de alineación, como concepto de RelativeLayout dice que "de referencia" de un control

0

Usted puede utilizar TableLayout en lugar de la segunda LinearLayout.And añadir un TableRow dentro del TableLayout y en la fila agregar cuatro botones

+0

TableLayout hace lo mismo si coloca todos sus elementos en la misma celda. Además, como dije, quiero quedarme con LinearLayout porque eventualmente agregaré un número desconocido de botones por código. No sé qué se mostrará en esos botones, así que debo mantener una forma simple de mostrarlos como un flujo. Además, se ajustará automáticamente cuando la pantalla gire. – darkzangel

Cuestiones relacionadas