No entiendo cómo usar este atributo. ¿Alguien puede decirme más al respecto?
650
No entiendo cómo usar este atributo. ¿Alguien puede decirme más al respecto?
Con layout_weight
usted puede especificar una relación de tamaño entre múltiples vistas. Por ejemplo, tiene un MapView
y un table
que debería mostrar información adicional al mapa. El mapa debe usar 3/4 de la pantalla y la tabla debe usar 1/4 de la pantalla. Luego establecerá el layout_weight
de map
a 3 y el layout_weight
de table
a 1.
Para que funcione, también debe establecer la altura o el ancho (según su orientación) en 0px.
En pocas palabras,
layout_weight
especifica cuánto espacio extra en el diseño se asignará a la Vista.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 de las vistas es cero.
Cálculo para asignar cualquier espacio restante entre el niño
En general, la fórmula es:
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 peso (0), el espacio restante se asigna de la siguiente manera:
Ejemplo 2
Digamos que tenemos una etiqueta de texto y dos elementos de edición de texto en una fila horizontal. La etiqueta no se ha
layout_weight
especificado, por lo que ocupa el espacio mínimo requerido para renderizar. Si el valorlayout_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 afirmamos que son igualmente importantes).Cálculo:
Si, en cambio, el primer cuadro de texto tiene un
layout_weight
1, y el segundo cuadro de texto tiene unlayout_weight
2, entonces un tercio del espacio restante se asignará al primero y dos tercios al segundo (porque reclamamos el segundo uno es más importante).Cálculo:
Artículo fuente
fuente
android:layout_width="0px"
es importante. Además, los pesos no necesitan ser enteros.weightSum
viene la imagen entonces? ¿Tiene algo que ver conlayout_weight
?Además de las otras respuestas, lo más importante para que esto funcione es establecer el ancho de diseño (o altura) en 0px
de lo contrario verás basura
fuente
Si hay varias vistas que abarcan a
LinearLayout
, entonceslayout_weight
les da a cada una un tamaño proporcional. Una vista con unlayout_weight
valor mayor "pesa" más, por lo que obtiene un espacio más grande.Aquí hay una imagen para aclarar las cosas.
Teoría
El término ponderación de diseño está relacionado con el concepto de promedio ponderado en matemáticas. Es como en una clase universitaria donde la tarea vale el 30%, la asistencia vale el 10%, la mitad del período vale el 20% y la final vale el 40%. Sus puntajes para esas partes, cuando se ponderan juntos, le dan su calificación total.
Es lo mismo para el peso del diseño. En
Views
horizontalLinearLayout
, cada uno puede ocupar un cierto porcentaje del ancho total. (O un porcentaje de la altura para una verticalLinearLayout
).El diseño
El
LinearLayout
que uses se verá así:Tenga en cuenta que debe usar
layout_width="match_parent"
paraLinearLayout
. Si lo usaswrap_content
, entonces no funcionará. También tenga en cuenta quelayout_weight
no funciona para las vistas en RelativeLayouts (vea aquí y aquí las respuestas SO que tratan este problema).Las vistas
Cada vista en horizontal se
LinearLayout
ve más o menos así:Tenga en cuenta que debe usar
layout_width="0dp"
junto conlayout_weight="1"
. Olvidar esto causa muchos problemas de nuevos usuarios. (Consulte este artículo para obtener diferentes resultados que puede obtener al no establecer el ancho en 0.) Si sus vistas están en vertical,LinearLayout
entonceslayout_height="0dp"
, por supuesto, las usaría .En el
Button
ejemplo anterior establecí el peso en 1, pero puede usar cualquier número. Es solo el total lo que importa. Puede ver en las tres filas de botones en la primera imagen que publiqué, los números son todos diferentes, pero como las proporciones son las mismas, los anchos ponderados no cambian en cada fila. A algunas personas les gusta usar números decimales que tienen una suma de 1 para que en un diseño complejo quede claro cuál es el peso de cada parte.Una nota final. Si tiene muchos diseños anidados que usan
layout_weight
, puede ser malo para el rendimiento.Extra
Aquí está el diseño xml para la imagen superior:
fuente
layout_weight
le dice a Android cómo distribuir suView
correo electrónico en aLinearLayout
. Luego, Android calcula primero la proporción total requerida para todosView
los correos electrónicos que tienen un peso especificado y los coloca deView
acuerdo con la fracción de pantalla que ha especificado que necesita. En el siguiente ejemplo, Android ve que losTextView
s tienen unlayout_weight
de0
(este es el valor predeterminado) y losEditText
s tienen unlayout_weight
de2
cada uno, mientras que elButton
tiene un peso de1
. Por lo tanto, Android asigna "suficiente" espacio para mostrartvUsername
ytvPassword
luego divide el resto del ancho de la pantalla en 5 partes iguales, dos de las cuales se asignan aetUsername
, dos aetPassword
la última parte y abLogin
:Se parece a:
y
fuente
Piénsalo de esa manera, será más simple
Si tiene 3 botones y sus pesos son 1,3,1 en consecuencia, funcionará como una tabla en HTML
Proporcione 5 porciones para esa línea: 1 porción para el botón 1, 3 porciones para el botón 2 y 1 porción para el botón 1
Considerar,
fuente
Una de las mejores explicaciones para mí fue esta (del tutorial de Android, busque el paso 7) :
fuente
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight define cuánto espacio debe obtener el control, respectivamente, para otros controles.
fuente
Para adicional:
Para
vertical
orientarse, no olvide establecerheight
en 0dpPara
horizontal
orientarse, no olvide establecerwidth
en 0dpfuente
Mire el weightSum de LinearLayout y el layout_weight de cada vista. android: weightSum = "4" android: layout_weight = "2" android: layout_weight = "2" Su layout_height son ambos 0px, pero no estoy seguro de que sea relevante
fuente
Combinando ambas respuestas de
Flo & rptwsthi y roetzi,
Recuerde cambiar su
layout_width=0dp/px
, de lo contrario, ellayout_weight
comportamiento actuará de manera inversa con el número más grande ocupado en el espacio más pequeño y el número más bajo ocupado en el espacio más grande.Además, algunas combinaciones de pesos provocarán que no se pueda mostrar un diseño (ya que ocupaba demasiado el espacio).
Cuidado con esto.
fuente
Agregar
android:autoSizeTextType="uniform"
cambiará el tamaño del texto automáticamentefuente
Como su nombre lo indica, el peso del diseño especifica qué cantidad o porcentaje de espacio debe ocupar un campo o widget en particular en el espacio de la pantalla.
Si especificamos el peso en orientación horizontal, entonces debemos especificar
layout_width = 0px
.Del mismo modo, si especificamos el peso en orientación vertical, entonces debemos especificar
layout_height = 0px
.fuente