¿Por qué los botones se extienden para cubrir todo el layout_weight asignado

Estoy tratando de conseguir 3 botones alineados (izquierda, centro, derecha). Sé que probablemente se puede hacer con gravedad, pero estoy tratando de entender el concepto de layout_weight aquí. Estoy usando este código:

<LinearLayout id=.. layout_width = "wrap_content" layout_height = "wrap_content" orientation="Horizonta" > <Button id=1 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> <Button id=2 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> <Button id=3 layout_width = "wrap_content" layout_height = "wrap_content" layout_weight = "1" text= "text" /> </LinearLayout> 

Sin embargo, estoy consiguiendo la parte SUPERIOR de la imagen abajo. Cual es correcta. La pregunta es ¿por qué es el botón estirado para cubrir todo el área que se asigna mientras estoy usando wrap_content? ¿Cómo puede hacerlo como la imagen de fondo?

Introduzca aquí la descripción de la imagen

Gracias

El layout_weight se utiliza para indicar cómo se debe dividir el espacio libre adicional en la pantalla entre los widgets. En este caso tenemos tres botones con el mismo layout_weight y por lo tanto los botones crecerán tanto hasta que todo el espacio libre haya desaparecido.

Debe intentar algo más para obtener los botones de tamaño original y la alineación que lo que queremos (izquierda – centro – derecha). Un problema es que el LinearLayout horizontal no es completamente colaborativo cuando se trata de respetar los parámetros de layout_gravity. Podremos usar los parámetros de layout_gravity que afectan a la alineación vertical, pero horizontales son ignorados por el parent LinearLayout, suspiro otro callejón sin salida.

Una solución es poner algo entre los botones que los empuja en el lugar correcto en la pantalla. La vista Espacio fue introducida en API 14 (Ice Cream Sandwich) y es adecuada para ser usada para 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="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight = "1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight = "1" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

Las vistas Espacio también se pueden reemplazar con un par de TextViews vacíos para que el diseño funcione en dispositivos que ejecutan niveles API anteriores.

 <TextView android:id="@+id/textView1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="" /> 

Cuando se utiliza el peso, la anchura de diseño se ommited y sólo se utiliza el algoritmo de peso y, a continuación, estirar el elemento.

Tus botones llenan el espacio porque usas layout_weight="1" que indica a los botones que tomen el espacio adicional disponible, también porque el atributo layout_weight es 1 para todos los botones que tomarán el mismo espacio y tendrán el mismo tamaño. No puedes obtener ese diseño inferior usando el layout_weight , usa layout_gravity para posicionarlos (aquí hay otra pregunta sobre esto. ¿Qué significa android: layout_weight? ).

Si desea la imagen siguiente, pruebe lo siguiente:

 <LinearLayout id=.. layout_width = "wrap_content" layout_height = "wrap_content" orientation="Horizonta" > <Button id=1 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="left" text= "text" /> <Button id=2 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="center_horizontal" text= "text" /> <Button id=3 layout_width = "wrap_content" layout_height = "wrap_content" android:layout_gravity="right" text= "text" /> </LinearLayout> 
  • Orden de los botones OK / Cancel en ICS
  • Posición RelativeLayout por debajo de RelativeLayout
  • Dos TextViews lado a lado, sólo uno para ellipsizar?
  • Error de Android Recursos duplicados
  • Android: cómo hacer crecer una vista para llenar el espacio disponible?
  • SetX (), setTranslationX (), setY () y setTranslationY ()
  • Diferencia entre @id y @android: id
  • Alinear texto a la izquierda, marcar la casilla a la derecha
  • Barra de estado blanca cuando se utiliza Admob en el diseño de la actividad
  • Android cómo cambiar el tamaño (escala) de un icono de vector xml mediante programación
  • Escalado de los padres pero no de los niños
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.