LVGL(lv_keyboard鍵盤)

文章目錄

  • LVGL 中的 `lv_keyboard` 詳解
    • 一、基本概念
      • 1. 主要用途
      • 2. 類型定義
    • 二、常用函數接口
      • 1. 創建鍵盤
      • 2. 設置目標輸入框(關聯文本輸入)
      • 3. 設置鍵盤模式
      • 4. 獲取當前模式
      • 5. 設置鍵盤關閉時的回調(如隱藏鍵盤)
    • 三、使用示例
    • 四、自定義鍵盤布局(進階)
    • 五、注意事項
    • 六、典型應用場景



LVGL 中的 lv_keyboard 詳解

lv_keyboard 是 LVGL 提供的一個虛擬鍵盤控件,通常用于觸摸屏設備,在需要文本輸入時配合 lv_textarea 使用。它支持數字鍵盤、英文鍵盤、符號鍵盤等多種模式,能夠有效提高嵌入式系統下的人機交互體驗。


一、基本概念

1. 主要用途

  • lv_textarea 搭配,提供觸控輸入。
  • 適合嵌入式設備(如 STM32 + 屏幕)中替代實體鍵盤。

2. 類型定義

lv_obj_t * lv_keyboard_create(lv_obj_t * parent);

創建一個鍵盤對象,指定其父對象。


二、常用函數接口

1. 創建鍵盤

lv_obj_t * kb = lv_keyboard_create(lv_scr_act());

創建一個鍵盤控件,并掛載在當前活動屏幕上。


2. 設置目標輸入框(關聯文本輸入)

lv_keyboard_set_textarea(kb, ta);

將鍵盤與一個 lv_textarea 對象 ta 關聯,使得點擊鍵盤時自動向該輸入框插入文本。


3. 設置鍵盤模式

lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_TEXT);

LVGL 鍵盤支持幾種輸入模式:

模式枚舉值說明
LV_KEYBOARD_MODE_TEXT默認英文全鍵盤
LV_KEYBOARD_MODE_NUM數字鍵盤(0-9)
LV_KEYBOARD_MODE_SPECIAL符號鍵盤
LV_KEYBOARD_MODE_USER_1/2用戶自定義模式

4. 獲取當前模式

lv_keyboard_mode_t mode = lv_keyboard_get_mode(kb);

5. 設置鍵盤關閉時的回調(如隱藏鍵盤)

lv_obj_add_event_cb(kb, keyboard_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

常見的處理方式是在回調中檢查是否按下的是 “OK” 或 “Close” 鍵,然后隱藏鍵盤。

void keyboard_event_cb(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t * kb = lv_event_get_target(e);if(code == LV_EVENT_VALUE_CHANGED) {const char * txt = lv_btnmatrix_get_btn_text(kb, lv_btnmatrix_get_selected_btn(kb));if(strcmp(txt, "OK") == 0 || strcmp(txt, "Close") == 0) {lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 隱藏鍵盤}}
}

三、使用示例

lv_obj_t * ta = lv_textarea_create(lv_scr_act());
lv_obj_set_size(ta, 200, 50);
lv_obj_center(ta);// 創建鍵盤并關聯輸入框
lv_obj_t * kb = lv_keyboard_create(lv_scr_act());
lv_obj_set_size(kb, 320, 150);
lv_keyboard_set_textarea(kb, ta);

這樣點擊鍵盤時輸入內容就會同步到 ta 上了。


四、自定義鍵盤布局(進階)

你也可以通過 lv_btnmatrix_set_map 自定義鍵盤鍵值布局,例如:

static const char * my_map[] = {"A", "B", "C", "\n","1", "2", "3", "\n","OK", "DEL", ""
};lv_keyboard_set_map(kb, LV_KEYBOARD_MODE_USER_1, my_map, NULL);
lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_USER_1);

五、注意事項

  • 創建 lv_keyboard 后默認是全鍵盤布局,使用 lv_keyboard_set_mode 切換其他模式。
  • 鍵盤控件通常不需要放在滾動區域或頁面中,應固定在屏幕底部。
  • lv_keyboard 默認高度比較高,如有需求可根據分辨率進行縮放或裁剪。

六、典型應用場景

  • 觸摸屏上的登錄界面(賬號/密碼輸入)
  • 設置界面中的數值/名稱輸入
  • 終端設備的用戶交互(如 POS 機、工業設備)

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

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

相關文章

opencv(C++) 圖像濾波

文章目錄 介紹使用低通濾波器對圖像進行濾波工作原理均值濾波器(Mean Filter / Box Filter)高斯濾波器(Gaussian Filter)案例實現通過濾波實現圖像的下采樣工作原理實現案例插值像素值(Interpolating pixel values)雙線性插值(Bilinear interpolation)雙三次插值(Bicu…

圖論學習筆記 4 - 仙人掌圖

先扔張圖: 為了提前了解我們采用的方法,請先閱讀《圖論學習筆記 3》。 仙人掌圖的定義:一個連通圖,且每條邊只出現在至多一個環中。 這個圖就是仙人掌圖。 這個圖也是仙人掌圖。 而這個圖就不是仙人掌圖了。 很容易發現&#xf…

華為OD機試真題——洞穴探險(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

Java設計模式之職責鏈模式詳解

Java設計模式之職責鏈模式詳解 一、職責鏈模式核心思想 核心目標:將請求的發送者與接收者解耦,使多個對象都有機會處理請求。這些處理者形成鏈式結構,請求沿鏈傳遞直到被處理或到達鏈尾,如政府審批層層上報機制。 二、職責鏈模式…

解決WPF短暫的白色閃爍(白色閃屏)

在 WPF 應用程序啟動時出現 短暫的白色閃爍(白色閃屏),通常是由于以下原因導致的: 主要原因 WPF 默認窗口背景是白色,在加載 UI 之前會短暫顯示白色背景。 解決方案 設置窗口背景為透明或黑色(推薦&…

《Python基礎》第1期:人生苦短,我用Python

介紹 Python 在英語中是蟒蛇的意思,它的 logo 也是兩條蟒蛇纏繞在一起。 然而 Python 和蟒蛇實際上沒有半點關系。 Python 是由荷蘭程序員 Guido van Rossum(因為其名字的前三個字母“gui”是中文“龜”的拼音,所以江湖人稱“龜叔”&#x…

DiT、 U-Net 與自回歸模型的優勢

DiT 相對于 U-Net 的優勢 全局自注意力 vs. 局部卷積 U-Net 依賴卷積和池化/上采樣來逐層擴大感受野,捕捉全局信息需要堆疊很多層或借助跳躍連接(skip connections)。DiT 在每個分辨率階段都用 Transformer 模塊(多頭自注意力 ML…

怎么查找idea插件的下載位置,并更改

長期使用 IntelliJ IDEA 時,默認存儲在 C 盤的配置文件會持續生成大量緩存和日志文件,可能導致系統盤空間不足。通過修改默認配置文件存儲位置,可以有效釋放 C 盤空間并提升系統性能。 1,先找到自己idea的下載目錄,再打…

IoT/HCIP實驗-1/物聯網開發平臺實驗Part2(HCIP-IoT實驗手冊版)

文章目錄 概述產品和設備實例的產品和設備產品和設備的關聯單個產品有多個設備為產品創建多個設備產品模型和物模型設備影子(遠程代理) 新建產品模型定義編解碼插件開發編解碼插件工作原理消息類型與二進制碼流添加消息(數據上報消息&#xf…

15.進程間通信(一)

一、進程間通信介紹 進程間通信目的: 數據傳輸:一個進程需要將它的數據發送給另?個進程 資源共享:多個進程之間共享同樣的資源。 通知事件:一個進程需要向另一個或一組進程發送消息,通知它(它們&#xf…

05-jenkins學習之旅-vue前項目部署實踐

1、創建被管理項目 2、構建流程說明 jenkins其實就是將服務部署拆分成了: 1、拉取代碼(git) 2、打包編譯(npm install) 3、自定義腳本(dist復制、執行啟動腳本) 4、部署成功后的一些通知等 3、demo配置 3.1、General 3.2 源碼管理 添加用戶名密碼方式如下圖 3.2…

服務器中分布式存儲數據技術都包含哪些內容?

隨著大數據時代的到來,企業和組織對于服務器的存儲要求也在不斷地增高,傳統的存儲架構已經無法滿足一些大規模的數據存儲和處理需求,分布式存儲技術應運而生,成為了大數據存儲的重要基礎設施,下面,就來介紹…

從比分滾動到數據革命:體育數據如何重構我們的觀賽體驗?

當凌晨三點的歐冠決賽與鬧鐘沖突時,當世界杯小組賽因時差難以全程跟進時,當代體育迷早已不再依賴電視直播 —— 打開手機里的比分網,實時跳動的體育大數據正構建著全新的觀賽宇宙。這些曾經被視為 "輔助工具" 的平臺,如…

vue2使用element中多選組件el-checkbox-group,數據與UI更新不同步

問題描述 使用element多選checkbox組件,點擊勾選取消勾選,視圖未變化,再次點擊表單其他元素,多選組件勾選狀態發生變化,視圖和數據未同步 第一次嘗試:再el-checkbox-group多選父組件上增加點擊事件&…

CodeTop之LRU緩存

題目鏈接 146. LRU 緩存 - 力扣(LeetCode) 題目解析 算法原理 我們使用雙向鏈表哈希表的形式來模擬緩存機制 首先我們要自己實現一個雙鏈表, 自己寫一個內部類, 這個內部類記錄了key,value,prev,next(前驅和后繼), 后續我們就通過這個內部類來構造雙…

PyQt學習系列11-綜合項目:多語言文件管理器

PyQt學習系列筆記(Python Qt框架) 第十一課:綜合項目 - 多語言文件管理器 (原課程規劃中的第十五課,按用戶要求調整為第十一課) 課程目標 綜合運用PyQt框架開發一個支持多語言的文件管理器實現以下核心功…

【Ubuntu修改串口延時(Latency Timer)為1毫秒(設備拔插或系統重啟后自動生效)】

Ubuntu修改串口延時Latency Timer為1毫秒-設備拔插或系統重啟后自動生效 在Ubuntu系統中,串口設備的延時參數(latency_timer)可以通過udev規則永久修改。以下是完整步驟: 創建udev規則文件 sudo vim /etc/udev/rules.d/99-ftdi-low-latency.rules添加以…

OpenCV CUDA模塊圖像處理------顏色空間處理之GPU 上交換圖像的通道順序函數swapChannels()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 該函數用于在 GPU 上交換圖像的通道順序(例如將 BGR 圖像轉為 RGB)。 它適用于多通道圖像(如 3 通道或 4 通道…

Linux Ubuntu24.04配置安裝MySQL8.4.5高可用集群主從復制!

MySQL 主從復制(Replication)是實現數據高可用、讀寫分離及異地容災的核心機制之一。主庫寫、從庫讀,提升并發能力;讀寫分離,減輕主庫壓力。 本地 windows 系統有一個Linux Ubuntu子系統,版本為Ubuntu 24.…

R基于邏輯回歸模型實現心臟病檢測及SHAP值解釋項目實戰

說明:這是一個機器學習實戰項目(附帶數據代碼文檔視頻講解),如需數據代碼文檔視頻講解可以直接到文章最后關注獲取。 1.項目背景 心血管疾病是全球范圍內導致死亡的主要原因之一,每年有數百萬人因此失去生命。在眾多的…