Kapitel 11 – Flex Layout

Aus Micropython
Zur Navigation springen Zur Suche springen
LVGL 9 mit MicroPython
Kapitel 11
Titel Flex Layout
Voraussetzungen Grundkenntnisse in MicroPython
Getestet mit LVGL 9.x
Schwierigkeitsgrad ★★★☆☆
Benötigte Zeit 45 Minuten
Status in Arbeit

Kapitel 11 – Flex Layout[Bearbeiten | Quelltext bearbeiten]

Lernziel[Bearbeiten | Quelltext bearbeiten]

Nach diesem Kapitel kannst du

  • Flex Layout aktivieren,
  • Widgets automatisch anordnen,
  • horizontale und vertikale Layouts erstellen,
  • Abstände und Größen steuern,
  • einfache UI-Strukturen bauen.

Was ist Flex?[Bearbeiten | Quelltext bearbeiten]

Flex ist ein Layout-System in LVGL.

Es ordnet Widgets automatisch innerhalb eines Containers an.

Du musst keine festen Koordinaten mehr angeben.

Grundidee[Bearbeiten | Quelltext bearbeiten]

Ein Container bestimmt:

  • Richtung
  • Abstand
  • Verhalten der Kinder

Die Kinder folgen diesen Regeln automatisch.

Flex aktivieren[Bearbeiten | Quelltext bearbeiten]

cont = lv.obj(scr)
cont.set_size(300, 200)

cont.set_layout(lv.LAYOUT_FLEX)

Standardverhalten[Bearbeiten | Quelltext bearbeiten]

Ohne weitere Einstellungen werden Widgets horizontal angeordnet.

btn1 = lv.button(cont)
btn2 = lv.button(cont)
btn3 = lv.button(cont)

Ergebnis[Bearbeiten | Quelltext bearbeiten]

Die Buttons erscheinen nebeneinander.

Richtung ändern[Bearbeiten | Quelltext bearbeiten]

Die Richtung wird über Flex-Gruppen gesteuert.

Vertikal[Bearbeiten | Quelltext bearbeiten]

cont.set_flex_flow(lv.FLEX_FLOW.COLUMN)

Horizontal[Bearbeiten | Quelltext bearbeiten]

cont.set_flex_flow(lv.FLEX_FLOW.ROW)

Beispiel vertikal[Bearbeiten | Quelltext bearbeiten]

import lvgl as lv

scr = lv.screen_active()

cont = lv.obj(scr)
cont.set_size(200, 300)
cont.center()

cont.set_flex_flow(lv.FLEX_FLOW.COLUMN)

for i in range(3):
    btn = lv.button(cont)
    label = lv.label(btn)
    label.set_text(f"Button {i+1}")

Abstand zwischen Elementen[Bearbeiten | Quelltext bearbeiten]

cont.set_flex_align(lv.FLEX_ALIGN_SPACE_EVENLY, 
                    lv.FLEX_ALIGN_CENTER, 
                    lv.FLEX_ALIGN_CENTER)

Erklärung[Bearbeiten | Quelltext bearbeiten]

Flex Align steuert:

  • Verteilung der Elemente
  • Ausrichtung
  • Abstand

Wichtige Flex-Modi[Bearbeiten | Quelltext bearbeiten]

  • START → oben/links
  • CENTER → mittig
  • END → unten/rechts
  • SPACE_BETWEEN → gleichmäßige Abstände
  • SPACE_EVENLY → gleichmäßige Verteilung

Grow (Wachstum)[Bearbeiten | Quelltext bearbeiten]

Ein Widget kann automatisch wachsen.

btn = lv.button(cont)
btn.set_flex_grow(1)

Erklärung[Bearbeiten | Quelltext bearbeiten]

grow = 1 bedeutet:

Das Widget nimmt verfügbaren Platz ein.

Beispiel mit Grow[Bearbeiten | Quelltext bearbeiten]

btn1 = lv.button(cont)
btn2 = lv.button(cont)
btn3 = lv.button(cont)

btn1.set_flex_grow(1)
btn2.set_flex_grow(2)
btn3.set_flex_grow(1)

Ergebnis[Bearbeiten | Quelltext bearbeiten]

  • btn2 wird größer als die anderen
  • Platz wird proportional verteilt

Typischer Fehler[Bearbeiten | Quelltext bearbeiten]

Achtung

Flex wirkt nur innerhalb eines Containers mit aktivem Layout. Widgets außerhalb eines Flex-Containers werden nicht beeinflusst.

Hinweis[Bearbeiten | Quelltext bearbeiten]

Hinweis

Flex ersetzt in LVGL fast vollständig manuelle Positionierung in komplexen UIs.

Merke[Bearbeiten | Quelltext bearbeiten]

Merke

Flex steuert automatische Anordnung von Widgets innerhalb eines Containers.

Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

  • Flex ordnet Widgets automatisch an
  • Richtung wird über ROW oder COLUMN gesetzt
  • Abstand und Verteilung sind steuerbar
  • grow erlaubt dynamische Größen
  • Flex ist die Basis moderner LVGL-Layouts