Android Weight

El diseño y la maquetación de las interfaces gráficas en Android ha evolucionado desde las primeras versiones hasta hoy, pero la adaptación a los distintos tipos de pantalla sigue siendo un quebradero de cabeza para los desarrolladores. Con la introducción del ConstraintLayout se ha aliviado el problema, pero sigue habiendo aplicaciones que no lo usan o que, directamente no pueden usarlo y han de tirar del método tradicional.

Usando DPs podemos conseguir que las distancias entre elementos se ajusten bien a las pantallas, pero a veces podemos tener el problema de que éstos se salen de la pantalla o que se fuerzan a ser más pequeños de lo que son porque no caben, simplemente. Para solucionar este tipo de problemas podemos echar mano del atributo Weight, para ello hay que tener en cuenta varias consideraciones:

  • Para usarlo, necesitamos que el contenedor sea un LinearLayout.
  • Debemos asignar pesos a las vistas contenidas en el padre.
  • Debemos dejar con el valor “0dp” el atributo (largo o alto) que queramos dejar en proporción.
  • Hay que fijarse bien en la orientación del layout padre.

LinearLayout  – weightSum

El parámetro weightSum nos va a decir en cuántas partes se divide el padre, es decir que si queremos dividirlo en 2 partes iguales, podemos dar un weightSum de 2, y luego asignar los pesos en los elementos contenidos dándoles un valor de peso de 1. Es muy importante recordar que este atributo solo está disponible en la clase LinearLayout de forma nativa. Aunque es posible que existan clases heredadas que lo permitan.

Podemos poner el valor que queramos, por ejemplo si queremos trabajar con porcentajes, podemos asignar un valor de 100, lo que dividirá la vista en 100 partes iguales, o incluso en 10000 partes, si queremos trabajar con porcentajes decimales. Es muy útil porque se adapta a lo que necesitamos. ¡Ah! Y recuerda poner la orientación correctamente, ya que es muy importante a la hora del cálculo automático de los valores de las vistas hijas.

Asignar Valores a las Vistas Contenidas

Una vez el padre está configurado, podemos añadir las vistas hijas. Estas sí que pueden ser de cualquier tipo que herede de View. Las colocamos y ponemos el atributo que ha de ser calculado automáticamente en el valor “0dp”. Esto nos obligará a asignar un valor al atributo “weight”. Le ponemos el valor que debe ocupar y ya estaría listo.

Por ejemplo si queremos dividir la pantalla en dos partes, una junto a la otra, la secuencia sería:

  • Layout de alineación horizontal con weightSum igual a 2.
  • Dos vistas con layout_width igual a “0dp” y weight igual a 1.

Para afianzar el conocimiento, te dejo aquí el vídeo en mi canal. No tengas reparo en consultar cualquier duda que tengas. ¡Ah! Y únete si quieres a los canales de WhatsApp y Telegram. ¡Te esperamos!