Hogyan lehet értelmes a sok Android-elrendezés

Lineáris, relatív, kényszer, asztal, keret stb. És így tovább. Az Android-alkalmazások egy csomó elrendezéssel választhatnak, amikor meg akarják tervezni az alkalmazást. A kérdés az, hogy melyik a legjobb?

Mielőtt részleteznénk a különböző elrendezéseket, először áttekintjük a nézetobjektum-hierarchiát és az Android rajzolási folyamatát.

View and ViewGroup

Gondoljon a ViewGroup-ra, mint bármely nézet szülőosztályára, valamint az elrendezések alaposztályára. Olyan objektumot képvisel, amely a többi nézet tárolója. Például a LinearLayout egy ViewGroup, mivel tartalmazhat nézeteket és más elrendezéseket is.

A View viszont az UI elemek alapvető építőköve. A nézetek a ViewGroup részei lehetnek. Például egy TextView egy nézet .

Mérés -> Elrendezés -> Döntetlen -> Ismételje meg

Az elrendezéseket XML fájlokként menti az Android. De hogyan alakíthatók át azokra az objektumokra, amelyeket a képernyőn látunk? Minden XML fájl példányos lesz (olvasható: felfújható), és egy nézet hierarchiafa jön létre. Ez azt jelenti, hogy ha van egy B elrendezésed, amely be van ágyazva az A elrendezésbe, akkor gyermek-szülő kapcsolatuk lesz (az A elrendezés a B elrendezés szülője). A fa kialakulása után 3 fázis következik be: Mérés, Elrendezés és Rajzolás. Ezen fázisok mindegyike a Mélység Első Keresési sorrendben halad át a fán.

Intézkedés

Az első szakaszban minden szülőcsomópont kitalál bizonyos korlátokat, amelyeket gyermekei a méretükkel kapcsolatosak. Ezeket a korlátozásokat lefelé terjeszti gyermekei felé, ahol minden gyermek felméri a saját méretét (mekkora akar lenni), és figyelembe veszi az általa adott korlátozásokat és gyermekeinek korlátjait.

Elrendezés

Itt minden csomópont eldönti gyermekei végleges méretét és helyzetét a képernyőn.

Húz

A gyökércsomópontból kiindulva, amely felhívja önmagát, azt mondja gyermekeinek, hogy rajzolják ki magukat. Ilyen módon az történik, hogy egy szülőt megrajzolják, a gyerekeit pedig a tetejére.

Figyelembe véve a fenti folyamatot, meg kell próbálnia az alkalmazás elrendezését a lehető leg sekélyebben tartani, hogy csökkentse a nézet hierarchiájának áthaladásához szükséges időt

Elrendezések lebontása

Lineáris

Sorra szervezi gyermekeit függőleges vagy vízszintes irányban. Vagyis a nézetek vagy egy sorban, vagy egy oszlopban lesznek. Az irányt megadhatja az android: orientation attribútum használatával.

A lineáris elrendezés egyik érdekes tulajdonsága a layout_weight attribútum. Ez arra szolgál, hogy elmondja a Lineáris elrendezésnek, hogyan ossza el a teret a gyermek nézetei között. Ez akkor hasznos, ha azt szeretné, hogy az elrendezés következetes legyen az eszközök és az irányok között.

Tegyük fel, hogy azt akarta, hogy az első, a Hello szót tartalmazó TextView mindig a képernyő szélességének 3/4-ét foglalja el. Ehhez használhatjuk a layout_weight attribútumot.

Relative

As the name implies, this layout will set its inner child views in relative position. This can keep your layout hierarchy flat with no nested view groups. At the same time, however, each Relative Layout has to undergo a process of two Measure passes, which can impact performance.

One useful feature of a RelativeLayout is the ability to center a child view by using the centerInParent attribute.

Original text


Constraint

A constraint is a connection or an alignment to the element the constraint is tied to. You define various constraints for every child view relative to other views present. This gives you the ability to construct complex layouts with a flat view hierarchy (no nested ViewGroups). Similar to RelativeLayout, this layout also requires two Measure passes.

Frame

This layout is used only to hold a single child view, thus blocking any other view in the layout. The layout itself will be as big as its biggest child view (visible or not), plus some padding.

Avoid having several child views inside a FrameLayout since it will be difficult to avoid the child views from overlapping one another. You can control the positions of these child views by assigning the layout_gravity attribute to each child.

List View/Grid View

Use when you have a need to present several items on screen (like in a restaurant menu). List View is a single column list that the user can scroll through. You can think of Grid View as a List View with more than one column.

What is important to know about these layouts is that the Views are dynamic and created at runtime. To make the items populate at runtime, you need to use an AdapterView.

TableLayout

Very similar to Grid View, this layout arranges its children into rows and columns. Each layout will contain several TableRow objects, each defining a row.

Don’t be afraid to try different layouts until you find the one that works best for you. Feel free to let me know in the comments below which layout is most useful to you and why.