Diseño lineal y peso en Android

Resuelto Janusz asked hace 54 años • 19 respuestas

Siempre leo sobre este valor de peso divertido en la documentación de Android. Ahora quiero probarlo por primera vez pero no funciona en absoluto.

Según tengo entendido por la documentación, este diseño:

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

  </LinearLayout>

Debes crear dos botones que estén alineados horizontalmente y compartan el espacio por igual. El problema es que los dos botones no crecen para llenar el espacio.

Me gustaría que los botones crecieran y llenaran toda la línea. Si ambos botones están configurados para coincidir con el padre, solo se muestra el primer botón y llena toda la línea.

Janusz avatar Jan 01 '70 08:01 Janusz
Aceptado

3 cosas para recordar:

  • establezca android:layout_width de los niños en "0dp"
  • establezca android:weightSum del padre ( edición: como Jason Moore notó, este atributo es opcional, porque de forma predeterminada está configurado en la suma de diseño_peso de los niños)
  • establezca android:layout_weight de cada niño proporcionalmente (por ejemplo, WeightSum="5", tres niños: diseño_peso="1", diseño_peso="3", diseño_peso="1")

Ejemplo:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="3" />

</LinearLayout>

Y el resultado:

Ejemplo de peso de diseño

Anke avatar Dec 23 '2010 09:12 Anke

No estás configurando la layout_weightpropiedad. Su código lee weight="1"y debería leer android:layout_weight="1".

JeremyFromEarth avatar Apr 23 '2010 17:04 JeremyFromEarth