Según la documentación, android:weightSumdefine la suma máxima de peso y se calcula como la suma layout_weightde todos los elementos secundarios si no se especifica explícitamente.
Consideremos un ejemplo con a LinearLayoutcon orientación horizontal y 3 ImageViewsdentro de él. Ahora queremos que estos ImageViewssiempre tomen el mismo espacio. Para lograr esto, puede establecer el valor layout_weightde cada uno ImageViewen 1 y weightSumse calculará igual a 3 como se muestra en el comentario.
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    <!-- android:weightSum="3" -->
    android:orientation="horizontal"
    android:layout_gravity="center">
   <ImageView
       android:layout_height="wrap_content"       
       android:layout_weight="1"
       android:layout_width="0dp"/>
  .....
weightSum es útil para que el diseño se represente correctamente para cualquier dispositivo, lo que no sucederá si establece el ancho y la altura directamente.
                 
                
                
                 
weightSum. El comportamiento en su ejemplo sería idéntico alweightSumomitido, y de hecho weightSum no debería especificarse en ese escenario. La documentación diceweightSum Defines the maximum weight sum. If unspecified, the sum is computed by adding the layout_weight of all of the children.Agregando a la respuesta de superM y Jeff,
Si hay 2 vistas en LinearLayout, la primera con un layout_weight de 1, la segunda con un layout_weight de 2 y sin weightSum, de forma predeterminada, el weightSum se calcula en 3 (suma de los pesos de los hijos) y la primera vista ocupa 1/3 del espacio, mientras que la segunda ocupa 2/3.
Sin embargo, si tuviéramos que especificar el weightSum como 5, el primero tomaría 1/5 del espacio mientras que el segundo tomaría 2/5. Por lo tanto, un total de 3/5 del espacio estaría ocupado por el diseño manteniendo el resto vacío.
fuente
La suma de peso funciona exactamente como lo desea (como otras respuestas, no tiene que sumar todos los pesos en el diseño principal). En la vista secundaria, especifique el peso que desea que tome. No olvides especificar
El siguiente es un ejemplo
Esto se verá como
fuente
La documentación lo dice mejor e incluye un ejemplo (destacando el mío).
Entonces, para corregir el ejemplo de superM, suponga que tiene una
LinearLayoutorientación horizontal que contiene dosImageViewsy unaTextViewcon. DefinaTextViewque tiene un tamaño fijo y desea que los dosImageViewsocupen el espacio restante por igual.Para lograr esto, aplicaría
layout_weight1 a cada unoImageView, ninguno en elTextView, y unweightSum2.0 en elLinearLayout.fuente
Después de experimentar un poco, creo que el algoritmo para LinearLayout es este:
Suponga que
weightSumse establece en un valor. El caso de ausencia se discute más adelante.Primero, divida el
para cada elemento. El valor predeterminado para 
weightSumpor el número de elementos conmatch_parentofill_parenten la dimensión de LinearLayout (por ejemplo,layout_widthfororientation="horizontal"). Llamaremos a este valor el multiplicador de pesoweightSumes 1.0, entonces el multiplicador de peso predeterminado es1/n, dondenes el número defill_parentelementos;wrap_contentelementos no contribuyen an.Por ejemplo, cuando
weightSumes 60 y hay 3fill_parentelementos, el multiplicador de peso es 20. El multiplicador de peso es el valor predeterminado para, por ejemplo,layout_widthsi el atributo está ausente.En segundo lugar, se calcula la máxima expansión posible de cada elemento. Primero, los
wrap_contentelementos se calculan de acuerdo con sus contenidos. Su expansión se deduce de la expansión del contenedor principal. Llamaremos al remanenteexpansion_remainer. Este resto se distribuye entre losfill_parentelementos según sulayout_weight.Tercero, la expansión de cada
fill_parentelemento se calcula como:Ejemplo:
Si
weightSumes 60, y hay 3fill_parentelementos con los pesos 10, 20 y 30, su expansión en la pantalla es 2/3, 1/3 y 0/3 del contenedor principal.La expansión mínima está limitada a 0. La expansión máxima está limitada al tamaño principal, es decir, los pesos están limitados a 0.
Si un elemento se establece en
(por ejemplo, entre 0-1 para 
wrap_content, su expansión se calcula primero, y la expansión restante está sujeta a distribución entre losfill_parentelementos. SiweightSumse establece, esto lleva alayout_weightno tener efecto sobre loswrap_contentelementos Sin embargo, loswrap_contentelementos aún pueden ser empujados fuera del área visible por elementos cuyo peso es menor queweightSum= 1 o entre 0-20 para el ejemplo anterior).Si no
weightSumse especifica, se calcula como la suma de todos loslayout_weightvalores, incluidos los elementos conwrap_contentset! Por lo tanto, haberlayout_weightestablecidowrap_contentelementos puede influir en su expansión. Por ejemplo, un peso negativo reducirá los otrosfill_parentelementos. Antes de presentar losfill_parentelementos, la fórmula anterior se aplicará a loswrap_contentelementos, siendo la expansión máxima posible su expansión de acuerdo con el contenido envuelto. Loswrap_contentelementos se reducirán, y luegofill_parentse calculará y distribuirá la máxima expansión posible para los elementos restantes .Esto puede conducir a resultados poco intuitivos.
fuente
Si no se especifica, la suma se calcula sumando el layout_weight de todos los elementos secundarios. Esto se puede usar, por ejemplo, para dar a un solo hijo el 50% del espacio total disponible al asignarle un layout_weight de 0.5 y establecer el weightSum en 1.0. Debe ser un valor de coma flotante, como "1.2"
fuente
Una cosa que parece que nadie más mencionó: digamos que tiene una vertical
LinearLayout, por lo que para que los pesos en diseño / elemento / vista funcionen al 100% correctamente, todos deben tenerlayout_heightpropiedades (que deben existir en su xml archivo) establecido en0dp. Parece que cualquier otro valor arruinaría las cosas en algunos casos.fuente
Layout Weight funciona como una relación. Por ejemplo, si hay un diseño vertical y hay dos elementos (como botones o vistas de texto), uno con un peso de diseño 2 y el otro con un peso de diseño 3, respectivamente. Luego, el primer elemento ocupará 2 de 5 porciones de la pantalla / diseño y el otro 3 de 5 porciones. Aquí 5 es la suma de peso. es decir, la suma de peso divide todo el diseño en porciones definidas. Y el Peso de diseño define la cantidad de porción que ocupa un artículo en particular de la Suma de peso total predefinida. La suma de peso también se puede declarar manualmente. Los botones, las vistas de texto, los textos de edición, etc., todos se organizan utilizando la suma de peso y el peso del diseño cuando se utilizan diseños lineales para el diseño de la interfaz de usuario.
fuente
De la documentación del desarrollador
Esto se puede usar, por ejemplo, para dar a un solo hijo
50%del espacio total disponible dándole un layout_weight de0.5y estableciendo el weightSum en1.0.Además de la respuesta @Shubhayu
El resto
3/5se puede utilizar para otros diseños secundarios que realmente no necesitan ninguna parte específica del diseño que contiene.Este es el uso potencial de la
android:weightSumpropiedad.fuente