Wie man die vielen Android-Layouts versteht

Linear, Relativ, Einschränkung, Tabelle, Rahmen und so weiter und so fort. Android-Anwendungen haben eine ganze Reihe von Layouts zur Auswahl, wenn Sie Ihre Anwendung entwerfen möchten. Die Frage ist, welches ist das beste?

Bevor wir uns mit den verschiedenen Layouts befassen, gehen wir zunächst auf die Hierarchie der Ansichtsobjekte und den Zeichenprozess von Android ein.

View und ViewGroup

Stellen Sie sich ViewGroup als übergeordnete Klasse einer Ansicht und als Basisklasse für Layouts vor. Es stellt ein Objekt dar, das der Container für andere Ansichten ist. Ein LinearLayout ist beispielsweise eine ViewGroup, da es auch Ansichten und andere Layouts enthalten kann.

Die Ansicht ist dagegen der Grundbaustein der UI-Elemente. Ansichten können Teil einer ViewGroup sein. Eine Textansicht ist beispielsweise eine Ansicht .

Messen -> Layout -> Zeichnen -> Wiederholen

Layouts werden in Android als XML-Dateien gespeichert. Aber wie werden sie in die Objekte konvertiert, die wir auf dem Bildschirm sehen? Jede XML-Datei wird instanziiert (gelesen: aufgeblasen) und ein Ansichtshierarchiebaum wird gebildet. Dies bedeutet, dass wenn Sie Layout B haben, das in Layout A verschachtelt ist, diese eine untergeordnete Beziehung haben (Layout A ist das übergeordnete Element von Layout B). Sobald der Baum gebildet ist, gibt es drei Phasen: Messen, Layouten und Zeichnen. Jede dieser Phasen durchläuft den Baum in einer Reihenfolge der Tiefensuche.

Messen

In der ersten Phase ermittelt jeder übergeordnete Knoten bestimmte Einschränkungen, die seine untergeordneten Knoten hinsichtlich ihrer Größe haben. Diese Einschränkungen werden an seine Kinder weitergegeben, wobei jedes Kind seine eigene Größe (wie groß es sein möchte) bewertet und die Einschränkungen, die es erhalten hat, und die Einschränkungen seiner Kinder berücksichtigt.

Layout

Hier entscheidet jeder Knoten über die endgültige Größe und Position jedes seiner untergeordneten Knoten auf dem Bildschirm.

Zeichnen

Ausgehend vom Wurzelknoten, der sich selbst zeichnet, weist er seine Kinder an, sich selbst zu zeichnen. Auf diese Weise wird ein Elternteil gezeichnet und seine Kinder werden darauf gezeichnet.

Unter Berücksichtigung des obigen Prozesses sollten Sie versuchen, das Layout Ihrer Anwendung so flach wie möglich zu halten, um die Zeit zu verkürzen, die zum Durchlaufen der Ansichtshierarchie erforderlich ist

Aufschlüsselung der Layouts

Linear

Organisiert seine Kinder in einer Reihe mit einer Ausrichtung von vertikal oder horizontal. Das heißt, die Ansichten befinden sich entweder alle in einer Zeile oder einer Spalte. Sie können die Richtung mithilfe des Attributs android: Orientierung angeben .

Ein interessantes Merkmal eines linearen Layouts ist das Attribut layout_weight . Dies wird verwendet, um dem linearen Layout mitzuteilen, wie der Abstand zwischen untergeordneten Ansichten aufgeteilt werden soll. Dies ist nützlich, wenn Sie möchten, dass Ihr Layout zwischen Geräten und Ausrichtungen konsistent ist.

Angenommen, Sie möchten, dass die erste Textansicht mit dem Wort " Hallo" immer 3/4 der Bildschirmbreite einnimmt. Dazu können wir das Attribut layout_weight verwenden.

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.