Kapitel 10 – Layout (Grundlagen)
| LVGL 9 mit MicroPython | |
|---|---|
| Kapitel | 10 |
| Titel | Layout (Grundlagen) |
| Voraussetzungen | Grundkenntnisse in MicroPython |
| Getestet mit | LVGL 9.x |
| Schwierigkeitsgrad | ★★☆☆☆ |
| Benötigte Zeit | 35 Minuten |
| Status | in Arbeit |
Kapitel 10 – Layout (Grundlagen)[Bearbeiten | Quelltext bearbeiten]
Lernziel[Bearbeiten | Quelltext bearbeiten]
Nach diesem Kapitel kannst du
- verstehen, warum Layouts notwendig sind,
- einfache Anordnungen von Widgets erstellen,
- Container verwenden,
- erste Schritte Richtung Flex Layout verstehen.
Warum Layout?[Bearbeiten | Quelltext bearbeiten]
Bisher haben wir Widgets mit
- center()
- align()
positioniert.
Das funktioniert gut für einzelne Elemente.
Sobald jedoch mehrere Widgets vorhanden sind, wird es unübersichtlich:
- Buttons müssen untereinander stehen
- Menüs sollen automatisch wachsen
- Listen sollen sich anpassen
Hier kommen Layouts ins Spiel.
Was ist ein Layout?[Bearbeiten | Quelltext bearbeiten]
Ein Layout steuert, wie Kinder eines Widgets angeordnet werden.
Ein Layout wirkt immer auf den Parent.
Das bedeutet:
- Der Container bestimmt die Anordnung
- Die Kinder folgen dieser Regel automatisch
Container[Bearbeiten | Quelltext bearbeiten]
Ein Container ist ein normales Widget, das andere Widgets enthält.
cont = lv.obj(scr)Beispiel Container[Bearbeiten | Quelltext bearbeiten]
import lvgl as lv
scr = lv.screen_active()
cont = lv.obj(scr)
cont.set_size(200, 200)
cont.align(lv.ALIGN.CENTER, 0, 0)Widgets im Container[Bearbeiten | Quelltext bearbeiten]
btn1 = lv.button(cont)
btn2 = lv.button(cont)
btn3 = lv.button(cont)Alle Buttons gehören zum Container.
Problem ohne Layout[Bearbeiten | Quelltext bearbeiten]
Ohne Layout liegen alle Widgets übereinander.
Das Ergebnis ist nicht nutzbar.
Erste einfache Lösung[Bearbeiten | Quelltext bearbeiten]
Man könnte Widgets manuell positionieren:
btn1.align(lv.ALIGN.TOP_MID, 0, 10)
btn2.align(lv.ALIGN.CENTER, 0, 0)
btn3.align(lv.ALIGN.BOTTOM_MID, 0, -10)Das funktioniert, ist aber unflexibel.
Warum das nicht reicht[Bearbeiten | Quelltext bearbeiten]
Manuelle Positionierung hat Nachteile:
- Änderungen sind aufwendig
- Skalierung auf verschiedene Displays schwierig
- Viele Berechnungen nötig
Vorbereitung auf Flex[Bearbeiten | Quelltext bearbeiten]
LVGL bietet dafür ein flexibles Layout-System:
- Flex Layout
- Grid Layout
Diese werden in den nächsten Kapiteln behandelt.
Wichtig[Bearbeiten | Quelltext bearbeiten]
Hinweis
Layouts wirken nur auf die direkten Child-Widgets eines Containers.
Merke[Bearbeiten | Quelltext bearbeiten]
Merke
Ein Layout steuert die Anordnung der Kinder eines Containers automatisch.
Zusammenfassung[Bearbeiten | Quelltext bearbeiten]
- Layouts ersetzen manuelle Positionierung
- Sie wirken auf Container
- Widgets werden automatisch angeordnet
- Flex und Grid folgen in den nächsten Kapiteln