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_weight
propiedad. 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_width
dos botones en "0dip" y losweight
dos botones en0.5
fuente
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-content
con0dp
.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_weight
conandroid:weight
.Cuando usas Weight con
LinearLayout
. debe agregarweightSum
enLinearLayout
y de acuerdo con la orientación de suLinearLayout
debe establecer0dp
para la anchura / altura a todosLinearLayout
`s vistas NiñosEjemplo:
Si la orientación de
Linearlayout
esVertical
, establezca el ancho de todasLinearLayout
las vistas secundarias con0dp
Si la orientación
Linearlayout
de eshorizontal
, entonces Establecer Altura de todasLinearLayout
las 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_weight
diseño lineal como2
:android:layout_weight="2"
fuente
Además, debe agregar esto
android:layout_width="0dp"
para las vistas secundarias [Vistas de botones] deLinerLayout
fuente
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_content
confill_parent
.fuente
fuente