当前位置: 首页 > news >正文

ESP32-S3 (ESP IDF 5.4.1 - LVGL 9.2.0)九宫格拼音输入法

拼音输入法提供了一个 API,用于为键盘小部件提供中文拼音输入法(中文输入),支持26键和9键输入模式。你可以将 lv_ime_pinyin 看作是键盘小部件的一个拼音输入法插件。

通常,能够运行键盘(lv_keyboard)的环境也能够运行 lv_ime_pinyin。主要的影响因素有两个:字体文件的大小和字典的大小。

在这里插入图片描述

在ESP32-S3上配置

配置中文字体

在这里插入图片描述

配置拼音

在这里插入图片描述

example demo代码实现

static void ta_event_cb(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t * ta = lv_event_get_target(e);lv_obj_t * kb = lv_event_get_user_data(e);if(code == LV_EVENT_FOCUSED) {if(lv_indev_get_type(lv_indev_active()) != LV_INDEV_TYPE_KEYPAD) {lv_keyboard_set_textarea(kb, ta);lv_obj_remove_flag(kb, LV_OBJ_FLAG_HIDDEN);}}else if(code == LV_EVENT_READY) {lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);lv_obj_remove_state(ta, LV_STATE_FOCUSED);lv_indev_reset(NULL, ta);   /*To forget the last clicked object to make it focusable again*/}
}void example_lvgl_demo_ui(void)
{lv_obj_t * pinyin_ime = lv_ime_pinyin_create(lv_screen_active());lv_obj_set_style_text_font(pinyin_ime, &lv_font_simsun_16_cjk, 0);//lv_ime_pinyin_set_dict(pinyin_ime, your_dict); // Use a custom dictionary. If it is not set, the built-in dictionary will be used./* ta1 */lv_obj_t * ta1 = lv_textarea_create(lv_screen_active());lv_textarea_set_one_line(ta1, true);lv_obj_set_style_text_font(ta1, &lv_font_simsun_16_cjk, 0);lv_obj_align(ta1, LV_ALIGN_TOP_LEFT, 0, 0);/*Create a keyboard and add it to ime_pinyin*/lv_obj_t * kb = lv_keyboard_create(lv_screen_active());lv_keyboard_set_textarea(kb, ta1);lv_ime_pinyin_set_keyboard(pinyin_ime, kb);lv_ime_pinyin_set_mode(pinyin_ime,LV_IME_PINYIN_MODE_K9);  // Set to 9-key input mode. Default: 26-key input(k26) mode.lv_obj_add_event_cb(ta1, ta_event_cb, LV_EVENT_ALL, kb);/*Get the cand_panel, and adjust its size and position*/lv_obj_t * cand_panel = lv_ime_pinyin_get_cand_panel(pinyin_ime);lv_obj_set_size(cand_panel, LV_PCT(100), LV_PCT(10));lv_obj_align_to(cand_panel, kb, LV_ALIGN_OUT_TOP_MID, 0, 0);/*Try using ime_pinyin to output the Chinese below in the ta1 above*/lv_obj_t * cz_label = lv_label_create(lv_screen_active());lv_label_set_text(cz_label,"嵌入式系统(Embedded System),\n是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。");lv_obj_set_style_text_font(cz_label, &lv_font_simsun_16_cjk, 0);lv_obj_set_width(cz_label, 310);lv_obj_align_to(cz_label, ta1, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
}

cand panel

lv_obj_t * cand_panel = lv_ime_pinyin_get_cand_panel(pinyin_ime);
lv_obj_set_size(cand_panel, LV_PCT(100), LV_PCT(10));
lv_obj_align_to(cand_panel, kb, LV_ALIGN_OUT_TOP_MID, 0, 0);
  1. lv_obj_t * cand_panel = lv_ime_pinyin_get_cand_panel(pinyin_ime);
    这行代码获取拼音输入法(pinyin_ime)中的候选词面板(candidate panel)对象。候选词面板用来显示拼音输入时可选的汉字或词组。

  2. lv_obj_set_size(cand_panel, LV_PCT(100), LV_PCT(10));
    这行代码设置候选词面板的尺寸。宽度为父容器(通常是屏幕或输入法主对象)的100%,高度为10%。

  3. LV_PCT(100) 表示宽度占父容器100%。
    LV_PCT(10) 表示高度占父容器10%。
    lv_obj_align_to(cand_panel, kb, LV_ALIGN_OUT_TOP_MID, 0, 0);
    这行代码将候选词面板对齐到键盘(kb)对象的上方中央。

LV_ALIGN_OUT_TOP_MID 表示相对于键盘对象的“外部上方居中”对齐。
最后两个参数 0, 0 表示在此基础上不做额外的偏移。

Reference

  1. Pinyin IME
  2. lv_example_ime_pinyin_2.c

相关文章:

  • Java 实现二进制与十进制之间的互相转换
  • 7.数据的预测分析及可视化
  • 网页 HTML布局(详解)
  • Javascript 编程基础(4)函数 | 4.2、this 绑定机制
  • 全球证券交易系统开发方案
  • Pytorch基础操作
  • C#中Task.Run的线程管理最佳实践与并发控制
  • 【Linux系统】第七节—git+cgdb(详解)
  • 更新ubuntu软件源遇到GPG error
  • MySQL中的重要常见知识点(入门到入土!)
  • Python高效网络爬虫开发指南
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(26):のは ・ のが ・ のを
  • 东莞一锂离子电池公司IPO终止,客户与供应商重叠,社保缴纳情况引疑
  • 力扣周赛置换环的应用,最少交换次数
  • Python爬虫实战:获取小说网最新风云榜数据并分析,为创作者提供参考素材
  • python-leetcode 71.每日温度
  • 【技术揭秘】Profinet转RS485如何优化冲剪机的实时通信性能?​​
  • App 出海:全渠道营销如何通过性能监控与精准归因实现增长
  • 【C++ Primer 学习札记】函数传参问题
  • Xilinx XCAU10P-2FFVB676I 赛灵思 Artix UltraScale+ FPGA
  • 建筑材料网站建设/菏泽资深seo报价
  • 搜索引擎优化哪些方面/五年级上册优化设计答案
  • 基金网站建设网站/西安网站外包
  • 网站备案 个人 单位/温州百度推广公司电话
  • 做刀模网站/seo是什么工作
  • 积分商城网站开发/域名收录