LVGL對象的盒子模型和樣式

文章目錄

      • 🧱 LVGL 對象盒子模型結構
      • 🔍 組成部分說明
      • 🎮 示例代碼
      • 📌 總結一句話
    • 🧱 一、樣式的本質:`lv_style_t` 對象
    • 🎨 二、樣式應用的方式
    • 🧩 三、樣式屬性分類(核心)
    • 🪄 四、多個樣式如何合成?
    • 🧪 五、簡易例子
    • ? 總結一句話


在 LVGL(Light and Versatile Graphics Library)中,對象的**盒子模型(Box Model)**類似于 Web/CSS 的布局思想,用于描述對象的結構、邊距、填充等空間關系。下面是簡明清晰的講解:


🧱 LVGL 對象盒子模型結構

+-------------------------------+ ← 外部對象區域
|         Margin                |
|   +-----------------------+   |
|   |      Border           |   |
|   |   +---------------+   |   |
|   |   |   Padding     |   |   |
|   |   | +----------+  |   |   |
|   |   | |  Content |  |   |   |
|   |   | +----------+  |   |   |
|   |   +---------------+   |   |
|   +-----------------------+   |
+-------------------------------+

🔍 組成部分說明

區域描述
Content對象真正顯示的內容(文字、圖像等)
Padding內容與邊框之間的內邊距,設置方式如 lv_obj_set_style_pad_all()
Border對象的邊框,樣式設置如 lv_obj_set_style_border_width()
Margin對象與其他對象之間的外邊距,僅在使用布局時起作用

🎮 示例代碼

lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_set_style_pad_all(btn, 10, 0);       // 設置 padding
lv_obj_set_style_border_width(btn, 2, 0);   // 設置 border
lv_obj_set_style_margin_all(btn, 5, 0);     // 設置 margin

📌 總結一句話

LVGL 的盒子模型由 margin、border、padding 和 content 組成,控制對象與周圍及自身內容的布局關系。

在 LVGL 中,樣式(Style)系統是實現美觀界面和靈活定制的核心機制之一。它允許開發者控制對象的顏色、大小、圓角、邊框、陰影、透明度、字體等屬性。下面我們分層次講清楚:


🧱 一、樣式的本質:lv_style_t 對象

LVGL 用 lv_style_t 結構體來描述樣式,例如:

static lv_style_t style;
lv_style_init(&style);
lv_style_set_bg_color(&style, lv_color_hex(0xff0000));  // 設置背景色為紅色

一個 style 就是一組視覺屬性集合,不屬于某個特定對象,可以多個對象復用。


🎨 二、樣式應用的方式

樣式不是自動生效的,必須綁定到對象上才能生效:

lv_obj_add_style(obj, &style, LV_PART_MAIN);

其中:

  • obj 是目標對象;
  • &style 是樣式指針;
  • LV_PART_MAIN 是應用到哪個部件(part),對象可能有多個部分,如主區域、指示器、滑塊等。

🧩 三、樣式屬性分類(核心)

屬性類別典型屬性(函數)說明
背景lv_style_set_bg_color()背景顏色
邊框lv_style_set_border_width()邊框寬度
內邊距lv_style_set_pad_all()padding
陰影lv_style_set_shadow_width()陰影大小
字體/文本lv_style_set_text_font()字體
圓角lv_style_set_radius()圓角半徑
不透明度lv_style_set_bg_opa()背景透明度

🪄 四、多個樣式如何合成?

LVGL 樣式系統支持多個樣式疊加:

  1. 優先級排序(重要!):

    • 本地樣式(lv_obj_add_style() 加的) > 主題樣式 > 默認樣式;
  2. 相同屬性時,后添加的會覆蓋先添加的;

  3. 不同屬性時會疊加。


🧪 五、簡易例子

lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello LVGL!");// 創建樣式
static lv_style_t style;
lv_style_init(&style);
lv_style_set_text_color(&style, lv_color_hex(0x0000FF));  // 藍色字體
lv_style_set_text_font(&style, &lv_font_montserrat_20);   // 大字體// 應用樣式
lv_obj_add_style(label, &style, LV_PART_MAIN);

? 總結一句話

LVGL 的樣式系統通過 lv_style_t 控制對象視覺屬性,支持疊加、復用和局部應用,功能類似于 CSS。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79305.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Github上如何準確地搜索開源項目

Github上如何準確地搜索開源項目: 因為尋找項目練手是最快速掌握技術的途徑,而Github上有最全最好的開源項目。 就像我的畢業設計“機器翻譯”就可以在Github上查找開源項目來參考。 以下搜索針對:項目名的關鍵詞,關注數限制&a…

正點原子IMX6U開發板移植Qt時出現亂碼

移植Qt時出現亂碼 1、前言2、問題3、總結 1、前言 記錄一下正點原子IMX6U開發板移植Qt時出現亂碼的解決方法,方便自己日后回顧,也可以給有需要的人提供幫助。 2、問題 用正點原子IMX6U開發板移植Qt時移植Qt后,sd卡里已經存儲了Qt的各種庫&…

python-django項目啟動尋找靜態頁面html順序

目錄結構 settings模塊 urls模塊 views模塊 1.settings文件下沒有DIR目錄,按照各app注冊順序尋找靜態頁面 啟動效果,直接返回注冊的app即app01下的templates文件夾下的html頁面 2.settings文件添加上DIR目錄 啟動效果,會優先去找項目下的templates文件…

MySQL索引詳解(上)(結構/分類/語法篇)

一、索引概述 索引本質是幫助MySQL高效獲取數據的排序數據結構(類似書籍目錄),通過減少磁盤I/O次數提升查詢效率。其核心價值體現在大數據量場景下的快速定位能力,但同時帶來存儲和維護成本。 核心特點: 優點&#…

數據集-目標檢測系列- 煙霧 檢測數據集 smoke >> DataBall

數據集-目標檢測系列- 消防 濃煙 檢測數據集 smoke>> DataBall 數據集-目標檢測系列- 煙霧 檢測數據集 smoke >> DataBall * 相關項目 1)數據集可視化項目:gitcode: https://gitcode.com/DataBall/DataBall-detections-10…

docker + K3S + Jenkins + Harbor自動化部署

最近公司在研究自動化部署的一套流程,下面記錄一下配置流程 需要提前準備好Jenkins Harbor Git(其他管理工具也可以) 我這里的打包編譯流程是Jenkins上配置打包任務-->自動到git目錄下找打包文件---->項目編譯后打鏡像包------>打完鏡像包將鏡像上傳到…

《用MATLAB玩轉游戲開發:從零開始打造你的數字樂園》基礎篇(2D圖形交互)-《打磚塊:向量反射與實時物理模擬》MATLAB教程

《用MATLAB玩轉游戲開發:從零開始打造你的數字樂園》基礎篇(2D圖形交互)-《打磚塊:向量反射與實時物理模擬》MATLAB教程 🎮 文章目錄 《用MATLAB玩轉游戲開發:從零開始打造你的數字樂園》基礎篇&#xff08…

Redisson 看門狗機制

何為看門狗 看門狗機制的主要作用是自動續期鎖,確保在節點完成任務之前,鎖不會過期。具體來說,當一個節點獲取到鎖后,看門狗會定期檢查該鎖的過期時間,并在必要時延長鎖的過期時間,確保節點可以順利完成任…

[架構之美]linux常見故障問題解決方案(十九)

[架構之美]linux下常見故障問題解決方案 一,文本文件忙 問題一:rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 無法創建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系統中遇到“文本文件忙”錯誤時…

QT實現曲線圖縮放、拖拽以及框選放大

.h文件 protected: void saveAxisRange();void wheelEvent(QWheelEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QPoint m_…

【Pandas】pandas DataFrame corr

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每個元素的絕對值DataFrame.all([axis, bool_only, skipna])用于判斷 DataFrame 中是否所有元素在指定軸上都為 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判斷…

青藏高原七大河流源區徑流深、蒸散發數據集(TPRED)

時間分辨率 月空間分辨率 1km - 10km共享方式 開放獲取數據大小 83.27 MB數據時間范圍 1998-07-01 — 2017-12-31元數據更新時間 2024-07-22 數據集摘要 通過構建耦合積雪、凍土、冰川等冰凍圈水文物理過程的WEB-DHM模型(Water and Energy Budget-based Distribute…

window環境下,如何通過USB接口控制打印機

雖然說大多數情況下,我們可以非常便利的通過打印機驅動來控制打印機,但還是有一些特殊情況,導致無法通過打印機驅動來完成我們預想的任務,比如,打印機只是一個系統設備中的一部分,需要協調其它設備一起工作…

CDGP數據治理主觀題評分標準與得分策略

1.數據模型題目評分標準 1)準確理解題目中所描述的業務邏輯和需求得[1分] 2)正確使用模型設計方法,使用信息工程、信息建模集成定義、巴克符號、陳氏符號等其中一種得[1分] 3)正確設計實體和屬性,題目中涉及的實體數量為25-30個,10個以內得[2分],10-20個得[3分],25個…

工業設計破局密碼:3D 可視化技術點燃產業升級引擎

3D可視化是一種將數據、信息或抽象概念以三維圖形、模型和動畫的形式呈現出來的技術。3D可視化技術通過構建三維數字孿生體,將設計思維轉化為可交互的虛擬原型,不僅打破了傳統二維設計的空間局限,更在效率、精度與用戶體驗層面開創了全新維度…

Qt中在子線程中刷新UI的方法

Qt中在子線程中刷新UI的方法 在Qt中UI界面并不是線程安全的,意味著在子線程中不能隨意操作UI界面組件(比如按鈕、標簽)等,如果強行操作這些組件有可能會導致程序崩潰。那么在Qt中如何在子線程中刷新UI控件呢? 兩種方…

為了摸魚和吃瓜,我開發了一個網站

平時上班真的比較累,摸魚和吃瓜還要跳轉多個平臺的話,就累上加累了。 所以做了一個聚合了全網主流平臺熱搜的網站。 目前市面上確實有很多這種網站了,所以目前最主要有兩點和他們不同: 給熱搜列表增加了配圖,刷的時候…

操作系統學習筆記第2章 (竟成)

第 2 章 進程管理 【考綱內容】 1.進程與線程: (1) 進程 / 線程的基本概念; (2) 進程 / 線程的狀態與轉換; (3) 線程的實現:內核支持的線程;線程庫支持的線程; (4) 進程與線程的組織與控制; (5)…

77.評論日記

房間要經常搞衛生,不然會很多灰,很多頭發,很多垃圾。 當然,即使一直搞衛生,在一些看不到的角落也是會慢慢囤積垃圾。 想要把那些角落也打掃干凈,沒別的辦法,只有把那個角落上所有的東西都移開&a…

語音合成之十二 TTS聲學編解碼器的演進

TTS聲學編解碼器的演進 1 引言:聲碼器/聲學編解碼器在現代TTS中的關鍵作用2 奠定基石:從早期聲碼器到神經合成的曙光3. HiFi-GAN: 革新高效高保真波形生成4. 新的疆域:面向富語義TTS的先進聲學編解碼器5. XCodec2.0: 統一聲學與語義信息6.BiC…