youtubers tesis sobre sirve resumida que para investigaciones investigacion historia caracteristicas android android-layout android-linearlayout weight android-layout-weight

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>



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>