Siempre leo sobre este valor de peso divertido en las documentaciones de Android. Ahora quiero probarlo por primera vez, pero no funciona en absoluto.
Según tengo entendido por las documentaciones de 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>
debería crear dos botones que estén alineados horizontalmente y compartir el espacio por igual. El problema es que los dos botones no crecen para llenar el espacio.
Me gustaría que los botones crezcan y llenen 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.

Respuestas:
No está configurando la
layout_weightpropiedad. Su código leeweight="1"y debería leerandroid:layout_weight="1".fuente
3 cosas para recordar:
Ejemplo:
Y el resultado:
fuente
addView(button, new LinearLayout.LayoutParams(0, height, 1));Esto es cierto incluso si está inflando diseños con los valores correctos de ancho y peso.Es
android:layout_weight. El peso solo se puede usar enLinearLayout. Si la orientación de lineallayout es Vertical, entonces useandroid:layout_height="0dp"y si la orientación es horizontal, entonces useandroid:layout_width = "0dp". Funcionará perfectamente.fuente
Esta imagen resume el diseño lineal.
Puede seguir este enlace para obtener más información sobre el tema. Just Maths - Vistas, Ver grupos y diseños
Video tutorial para diseño lineal: ancho, altura y pesos
Tutorial de diseño lineal de Android
fuente
Intente configurar los
layout_widthdos botones en "0dip" y losweightdos botones en0.5fuente
LinearLayout admite la asignación de un peso a niños individuales. Este atributo asigna un valor de " importancia " a una vista y le permite expandirse para llenar cualquier espacio restante en la vista principal. El peso predeterminado es cero
cálculo para asignar cualquier espacio restante / adicional entre el niño. (no el espacio total)
Asignación de espacio al niño = (peso individual del niño) / (suma del peso de cada niño en diseño lineal)
Ejemplo (1): si hay tres cuadros de texto y dos de ellos declaran un peso de 1, mientras que al tercero no se le asigna un peso (0), entonces el espacio restante / extra se asigna a
Ejemplo (2) : supongamos que tenemos una etiqueta de texto y dos elementos de edición de texto en una fila horizontal. La etiqueta no tiene un layout_weight especificado, por lo que ocupa el espacio mínimo requerido para renderizar. Si el diseño_peso de cada uno de los dos elementos de edición de texto se establece en 1, el ancho restante en el diseño principal se dividirá en partes iguales entre ellos (porque afirmamos que son igualmente importantes).
Si el primer cuadro de texto tiene un diseño_peso de 1 y el segundo cuadro de texto tiene un diseño_peso de 2, entonces un tercio del espacio restante se asignará al primero y dos tercios al segundo (porque afirmamos que el segundo es más importante).
fuente
En el campo ancho del botón, reemplace
wrap-contentcon0dp.Utilice el atributo layout_weight de una vista.
Así es como se verá su código:
layout_weight se usa para distribuir el espacio restante en proporciones. En este caso, los dos botones están tomando el ancho "0dp". Por lo tanto, el espacio restante se dividirá en una proporción de 1: 1 entre ellos, es decir, el espacio se dividirá en partes iguales entre las Vistas de botones.
fuente
Como respuesta de @Manoj Seelan
Reemplazar
android:layout_weightconandroid:weight.Cuando usas Weight con
LinearLayout. debe agregarweightSumenLinearLayouty de acuerdo con la orientación de suLinearLayoutdebe establecer0dppara la anchura / altura a todosLinearLayout`s vistas NiñosEjemplo:
Si la orientación de
LinearlayoutesVertical, establezca el ancho de todasLinearLayoutlas vistas secundarias con0dpSi la orientación
Linearlayoutde eshorizontal, entonces Establecer Altura de todasLinearLayoutlas vistas de Niños con0dp.fuente
Quizás configurar los dos botones de propiedades de layout_width en "fill_parent" hará el truco.
Acabo de probar este código y funciona en el emulador:
Asegúrese de establecer layout_width en "fill_parent" en ambos botones.
fuente
fuente
En el XML anterior, configure el
android:layout_weightdiseño lineal como2:android:layout_weight="2"fuente
Además, debe agregar esto
android:layout_width="0dp"para las vistas secundarias [Vistas de botones] deLinerLayoutfuente
Tienes que escribir así, funciona para mí
fuente
A continuación se muestran los cambios (marcados en negrita ) en su código:
Dado que LinearLayout tiene una orientación horizontal, por lo tanto, deberá mantener su ancho solo como 0dp. por usar pesas en esa dirección. (Si su orientación fuera vertical, habría mantenido su altura solo 0dp) .
Dado que hay 2 vistas y las ha colocado
android:layout_weight="1"para ambas vistas, significa que dividirá las dos vistas por igual en dirección horizontal (o por ancho).fuente
fuente
Esta es la respuesta perfecta a tu problema
fuente
Sustituir
wrap_contentconfill_parent.fuente
fuente