LVGL主要概念
1. Screen (屏幕):
概念: 屏幕是 LVGL 應用程序中的頂層容器。它是用戶界面的根對象,所有的可見 UI 元素最終都會添加到某個屏幕上(通常是活動屏幕)。
功能:
作為其他 UI 元素的父對象。
可以擁有自己的背景顏色、背景圖片等樣式。
LVGL 可以管理多個屏幕,但在任何給定時刻只有一個屏幕是“活動的”并顯示給用戶。
可以通過函數如 lv_scr_load()
或lv_scr_load_anim()
來加載和切換不同的屏幕。
可以使用lv_screen_active()
獲取當前活動屏幕的指針。
本質: 屏幕本身也是一個lv_obj_t
對象,只是它是最頂層的,沒有父對象(除了內部的顯示驅動器)。
2. Widgets (小部件):
概念: 小部件是預先構建的可交互或信息展示的 UI 組件,是構建用戶界面的基本 building blocks。
功能:
提供各種常見的 UI 元素,例如按鈕 (Button)、標簽 (Label)、滑塊 (Slider)、開關 (Switch)、圖表 (Chart)、列表 (List)、選項卡視圖 (Tabview)、儀表盤 (Gauge) 等等。
每個小部件都封裝了特定的功能和視覺表現。
可以通過 API 函數來創建、配置和控制小部件的行為和外觀。
可以響應用戶輸入(通過 Events)。
可以通過 Styles 進行定制。
本質: 每個小部件都是由一個或多個底層的 LVGL 對象(lv_obj_t)組合而成,并提供了特定的 API 來簡化其使用。
3. Events (事件):
概念: 事件是發生在 UI 對象上的動作或狀態改變,例如用戶的點擊、滑動、值改變,或者對象自身的創建、刪除、尺寸改變等。
功能:
允許應用程序響應用戶的交互和 UI 的狀態變化。
可以通過為對象注冊事件回調函數來處理特定的事件。
LVGL 定義了豐富的事件類型(例如
LV_EVENT_CLICKED
,
LV_EVENT_VALUE_CHANGED
,
LV_EVENT_DRAW_MAIN
,
LV_EVENT_DELETE
等)。
一個對象可以注冊多個事件回調函數來處理不同的事件。
事件回調函數可以接收事件發生的對象、事件代碼以及用戶自定義的數據作為參數。
本質: LVGL 內部維護著一套事件管理機制,當特定事件發生時,它會遍歷注冊到該對象上的回調函數并執行它們。
4. Parts (部件):
概念: 許多 LVGL 小部件并非單一的視覺元素,而是由多個可獨立樣式化的“部件”組成。
功能:
允許對小部件的不同視覺組成部分進行精細的樣式控制。
例如,按鈕可能包含一個主背景部件 (LV_PART_MAIN) 和一個按下時的效果部件 (LV_PART_PRESSED)。滑塊可能包含一個背景 (LV_PART_MAIN)、一個指示器 (LV_PART_INDICATOR) 和一個旋鈕 (LV_PART_KNOB)。
在設置樣式時,可以指定要應用樣式的部件。
通過 lv_obj_get_part() 等函數可以訪問小部件的特定部件。
本質: 部件是小部件內部組織結構的一種邏輯劃分,每個部件仍然是一個 lv_obj_t 對象或其概念上的組成部分。
5. States (狀態):
概念: UI 對象可以處于不同的狀態,這些狀態會影響其視覺外觀和行為。
功能:
LVGL 定義了多種內置狀態(例如 LV_STATE_DEFAULT
(默認), LV_STATE_PRESSED
(按下), LV_STATE_FOCUSED
(聚焦), LV_STATE_EDITED
(編輯), LV_STATE_DISABLED
(禁用), LV_STATE_CHECKED
(選中) 等)。
一個對象可以同時處于多個狀態(例如,一個被禁用的按鈕也可能被按下)。
樣式可以根據對象的狀態進行定制,使得對象在不同交互階段呈現不同的外觀(例如,按下按鈕時顏色變深)。
在設置樣式時,可以使用狀態標志來指定樣式只在特定狀態下生效。
本質: 對象內部維護著一個狀態標志位,當對象的交互或屬性發生變化時,這個標志位會被更新。
6. Styles (樣式):
概念: 樣式定義了 UI 對象的外觀屬性,例如背景顏色、邊框寬度、字體、文本顏色、內邊距、外邊距、圓角等等。
功能:
允許開發者定制 UI 元素的外觀。
樣式是可重用的,可以應用到多個對象或對象的不同部件和狀態。
可以創建和修改樣式對象 (lv_style_t)。
可以使用 lv_style_set_… 系列函數設置樣式的各種屬性。
可以使用 lv_obj_add_style() 將一個或多個樣式應用到一個對象上,并可以指定應用的部件和狀態。
樣式可以層疊,后添加的樣式會覆蓋之前添加的相同屬性。
本質: 樣式存儲在一個 lv_style_t 結構體中,包含了各種視覺屬性的值。
7. Themes (主題):
概念: 主題是一組預定義的樣式集合,旨在為應用程序提供一致的視覺風格。
功能:
提供了一種快速且簡單的方式來為整個應用程序設置統一的外觀。
LVGL 內置了多個主題(例如默認主題、蒙特塞拉特主題等),并且也支持自定義主題。
主題通常會為各種常用的小部件定義好在不同狀態下的默認樣式。
可以通過 lv_theme_set_act() 函數來激活一個主題。
即使使用了主題,仍然可以針對特定的對象或部件添加或修改自定義樣式,以實現更精細的控制。
本質: 主題通常是一個初始化函數,它會創建一系列預定義的 lv_style_t 對象,并在創建小部件時默認應用這些樣式。