tesis - Diseño lineal y peso en Android
tesis sobre youtube pdf (18)
3 cosas para recordar:
- establece el android: layout_width de los niños a "0dp"
- configurar android: weightSum del padre ( edit: como Jason Moore notó, este atributo es opcional, porque de manera predeterminada está establecido en la suma layout_weight de los niños)
- establezca el android: layout_weight de cada niño proporcionalmente (por ejemplo, weightSum = "5", tres hijos: layout_weight = "1", layout_weight = "3", layout_weight = "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:
Siempre leo sobre este divertido valor de peso en las documentaciones de Android. Ahora quiero probarlo por primera vez, pero no funciona en absoluto.
Como lo entiendo por la documentación 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>
Debe 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 los padres, solo se muestra el primer botón y llena toda la línea.
A continuación se muestran los cambios (marcados en NEGRO ) en su código:
<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="0dp" //changes made here
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" /> //changes made here
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="0dp" //changes made here
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" /> //changes made here
</LinearLayout>
Dado que su LinearLayout tiene orientación horizontal, por lo tanto, deberá mantener su ancho solo como 0dp. Por usar pesos en esa dirección. (Si su orientación fuera vertical, habría mantenido su altura solo 0dp) .
Ya que hay 2 vistas y ha colocado android:layout_weight="1"
para ambas vistas, significa que dividirá las dos vistas por igual en dirección horizontal (o por ancho).
Además, debe agregar este android:layout_width="0dp"
para las vistas de niños [Vistas de botón] de LinerLayout
Como respuesta de @Manoj Seelan
Reemplace android:layout_weight
con android:weight
.
Cuando usas peso con LinearLayout
. debe agregar weightSum
en LinearLayout
y de acuerdo con la orientación de su LinearLayout
, debe configurar 0dp
para Ancho / Altura en todas las LinearLayout
los niños de LinearLayout
Ejemplo:
Si la orientación de Linearlayout
es Vertical
, LinearLayout
ancho de todas las LinearLayout
los niños de 0dp
con 0dp
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="3">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="2" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
Si la orientación de Linearlayout
es horizontal
, entonces configure la altura de todas las LinearLayout
los niños de 0dp
con 0dp
.
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:padding="10dip"
android:layout_weight="2" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
En el XML anterior, establezca el android:layout_weight
del diseño lineal como 2
: android:layout_weight="2"
En el campo ancho del botón, reemplace wrap-content
con 0dp
.
Usa el atributo layout_weight de una vista.
android:layout_width="0dp"
Así es como se verá tu código:
<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="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
layout_weight se utiliza para distribuir el espacio que quede en proporciones. En este caso, los dos botones están tomando ancho "0dp". Por lo tanto, el espacio restante se dividirá en proporción 1: 1 entre ellos, es decir, el espacio se dividirá en partes iguales entre las Vistas de botones.
Es android:layout_weight
. El peso solo se puede utilizar en LinearLayout
. Si la orientación de linearlayout es Vertical, entonces use android:layout_height="0dp"
y si la orientación es horizontal, entonces use android:layout_width = "0dp"
. Funcionará perfectamente.
Esta es la respuesta perfecta a tu problema.
<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: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>
Esta imagen resume el diseño lineal.
Puede seguir este enlace para obtener más información sobre el tema. Solo Matemáticas - Vistas, Ver Grupos y Diseños
Video tutorial para diseño lineal: ancho, alto y pesos
Intente configurar el layout_width
de layout_width
de ambos botones en "0dip" y el weight
de ambos botones en 0.5
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 / extra entre hijos. (no el espacio total)
espacio asignado a 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 ningún peso (0), entonces el espacio restante / adicional se asigna a
1st text box = 1/(1+1+0)
2nd text box = 1/(1+1+0)
3rd text box = 0/(1+1+0)
Ejemplo (2) : digamos que tenemos una etiqueta de texto y dos elementos de edición de texto en una fila horizontal. La etiqueta no tiene layout_weight especificado, por lo que ocupa el espacio mínimo requerido para renderizar. Si layout_weight 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 consideramos que son igualmente importantes).
calculation :
1st label = 0/(0+1+1)
2nd text box = 1/(0+1+1)
3rd text box = 1/(0+1+1)
Si el primer cuadro de texto tiene un layout_weight de 1 y el segundo cuadro de texto tiene un layout_weight 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).
calculation :
1st label = 0/(0+1+2)
2nd text box = 1/(0+1+2)
3rd text box = 2/(0+1+2)
No está configurando la propiedad layout_weight
. Su código lee weight="1"
y debería leer android:layout_weight="1"
.
Sustituye wrap_content
con fill_parent
.
Tal vez la configuración de las propiedades de ambos botones layout_width en "fill_parent" hará el truco.
Acabo de probar este código y funciona en el emulador:
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="hello world"/>
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="goodbye world"/>
</LinearLayout>
Asegúrese de establecer layout_width en "fill_parent" en ambos botones.
Tienes que escribir así está trabajando para mí.
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_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"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="#008">
<RelativeLayout
android:id="@+id/paneltamrin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
>
<Button
android:id="@+id/BtnT1"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:drawableTop="@android:drawable/ic_menu_edit"
android:drawablePadding="6dp"
android:padding="15dp"
android:text="AndroidDhina"
android:textColor="#000"
android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/paneltamrin2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
>
<Button
android:layout_width="wrap_content"
android:layout_height="150dp"
android:drawableTop="@android:drawable/ic_menu_edit"
android:drawablePadding="6dp"
android:padding="15dp"
android:text="AndroidDhina"
android:textColor="#000"
android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Button 1" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="Button 2" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Button 3" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/logonFormButtons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:baselineAligned="true"
android:orientation="horizontal">
<Button
android:id="@+id/logonFormBTLogon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/logon"
android:layout_weight="0.5" />
<Button
android:id="@+id/logonFormBTCancel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:layout_weight="0.5" />
</LinearLayout>