Sådan får du mening om de mange Android-layouts

Lineær, relativ, begrænsning, tabel, ramme og så videre og så videre. Android-applikationer har en hel række layouts at vælge imellem, når du vil designe din applikation. Spørgsmålet er, hvilken er den bedste?

Før vi går i detaljer med de forskellige layouter, går vi først gennem synsobjekthierarkiet og Android's tegningsproces.

Vis og ViewGroup

Tænk på ViewGroup som overordnet klasse til enhver visning og også som basisklasse for layout. Det repræsenterer et objekt, der er beholderen til andre visninger. For eksempel er en LinearLayout en ViewGroup, da den også kan indeholde visninger og andre layouts.

Visning er derimod den grundlæggende byggesten for UI-elementer. Visninger kan være en del af en ViewGroup. For eksempel er en TextView en visning .

Mål -> Layout -> Tegn -> Gentag

Layouter gemmes som XML-filer i Android. Men hvordan konverteres de til de objekter, vi ser på skærmen? Hver XML-fil bliver instantieret (læs: oppustet), og der dannes et visningshierarkitræ. Dette betyder, at hvis du har layout B, der er indlejret i layout A, vil de have et barn-forælder-forhold (layout A er overordnet til layout B). Når træet er dannet, er der 3 faser, der vil ske: Mål, Layout og Tegn. Hver af disse faser krydser træet i en dybde første søgningsrækkefølge.

Måle

I den første fase finder hver forælderknude ud af visse begrænsninger, som børnene har med hensyn til deres størrelse. Det overfører disse begrænsninger ned til sine børn, hvor hvert barn vurderer sin egen størrelse (hvor stor det ønsker at være) og tager højde for de begrænsninger, det har fået, og dets børns begrænsninger.

Layout

Her bestemmer hver knude den endelige størrelse og placering af hver af sine børn på skærmen.

Tegne

Fra rodnoden, der trækker sig selv, fortæller den derefter sine børn at tegne sig selv. På denne måde er det, der sker, at en forælder vil blive tegnet, og dens børn vil blive tegnet oven på den.

Når du holder ovenstående i tankerne, skal du prøve at holde layoutet på din applikation så lavt som muligt for at reducere den tid, det tager at krydse visningshierarkiet

Layouts opdeling

Lineær

Organiserer sine børn i træk med en retning lodret eller vandret. Betydning, visningerne vil enten være alle i en række eller en kolonne. Du kan angive retningen ved hjælp af attributten android: orientering .

En interessant funktion, som et lineært layout har, er attributten layout_weight . Dette bruges til at fortælle Lineært layout, hvordan man opdeler mellemrummet mellem børns synspunkter. Det er nyttigt, når du vil have dit layout til at være ensartet mellem enheder og retninger.

Lad os sige, at du ønskede, at den første TextView, der indeholder ordet Hej, altid skulle tage 3/4 af skærmens bredde. For at gøre dette kan vi bruge attributten layout_weight.


    

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.

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.