代码:
#ifndef LV_VIRTUALKEYBOARD_T_H
#define LV_VIRTUALKEYBOARD_T_H
#include "lvgl/lvgl.h"
#include <vector>
#include <string>
struct KeyboardLayout
{
const char **layout; // 字符串数组的指针
const lv_btnmatrix_ctrl_t *controls; // 控制结构体数组的指针
};
enum KeyboardMode
{
Lowercase, //小写模式
Capital, //大写模式
Number, //数字
Select, //选择键盘
Special_symbols //特殊符号
};
const int chineseWord_maxSize = 100;
typedef struct
{
lv_obj_t obj;
lv_obj_t * editPanel;
lv_obj_t * chineseCharacterPanel;
lv_obj_t * chineseCharacterPanel_container;//chineseCharacterPanel的容器,为了使中文太多chineseCharacterPanel显示不下可以滚动
lv_obj_t * textArea;
lv_obj_t * inputChineseCharacterLabel;
std::vector<KeyboardLayout> layouts;
KeyboardMode keyboardMode;
bool isChinese;
lv_style_t chineseCharacterPanel_style_main;
lv_style_t chineseCharacterPanel_style_item;
lv_style_t chineseCharacterPanel_container_style;
std::string inputChineWord;
const char * inputChineWordArray[chineseWord_maxSize + 1];
} lv_virtualKeyboard_t;
lv_obj_t * lv_virtualkeyboard_create(lv_obj_t * parent);
void lv_virtualKeyboard_set_textarea(lv_obj_t * obj, lv_obj_t * textArea);
void lv_virtualKeyboard_set_keyboardMode(lv_obj_t * obj,KeyboardMode mode);
#endif // LV_VIRTUALKEYBOARD_T_H
#include "lv_virtualkeyboard_t.h"
#include "utf8chinese.h"
#include <iostream>
LV_FONT_DECLARE(lv_font_siyuanheiti16);
#define MY_CLASS &lv_virtualKeyboard_class
#define LV_KB_BTN(width) LV_BTNMATRIX_CTRL_POPOVER | width
void lv_virtualkeyboard_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj);
void lv_virtualkeyboard_destructor(const lv_obj_class_t * class_p, lv_obj_t * obj);
void lv_virtualKeyboard_def_event_cb(lv_event_t *e);
void updateMatchChinaWordList(lv_virtualKeyboard_t * keyboard);
void closeChineseCharacterPanel(lv_virtualKeyboard_t * keyboard);
const lv_obj_class_t lv_virtualKeyboard_class =
{
.base_class = &lv_obj_class,
.constructor_cb = lv_virtualkeyboard_constructor,
.destructor_cb = lv_virtualkeyboard_destructor,
.width_def = LV_PCT(100),
.height_def = LV_PCT(50),
.group_def = LV_OBJ_CLASS_GROUP_DEF_TRUE,
.instance_size = sizeof(lv_virtualKeyboard_t),
};
lv_obj_t * lv_virtualkeyboard_create(lv_obj_t * parent)
{
LV_LOG_INFO("begin");
lv_obj_t * obj = lv_obj_class_create_obj(MY_CLASS, parent);
lv_obj_class_init_obj(obj);
return obj;
}
const char * layout_Lowercase_letters[] =
{
"数字", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", LV_SYMBOL_BACKSPACE, "\n",
"大小写", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_NEW_LINE, "\n",
"中/英文", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n",
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""
};
const char * layout_Capital_letters[] =
{
"数字", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n",
"大小写", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n",
"中/英文", "Z", "X", "C", "V", "B", "N", "M", ".", ",", ":", "\n",
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""
};
const lv_btnmatrix_ctrl_t ctrl_Lowercase_letters[] =
{
LV_KEYBOARD_CTRL_BTN_FLAGS | 5, LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_KB_BTN(4), LV_BTNMATRIX_CTRL_CHECKED | 7,
LV_KEYBOARD_CTRL_BTN_FLAGS | 6, LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_KB_BTN(3), LV_BTNMATRIX_CTRL_CHECKED | 7,
LV_KEYBOARD_CTRL_BTN_FLAGS | 2 | LV_BTNMATRIX_CTRL_CHECKABLE, LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_BTNMATRIX_CTRL_CHECKED | LV_KB_BTN(1), LV_BTNMATRIX_CTRL_CHECKED | LV_KB_BTN(1), LV_BTNMATRIX_CTRL_CHECKED | LV_KB_BTN(1),
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 6, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2
};
const char * layout_number[] =
{
"1", "2", "3", LV_SYMBOL_KEYBOARD, "\n",
"4", "5", "6", LV_SYMBOL_OK, "\n",
"7", "8", "9", LV_SYMBOL_BACKSPACE, "\n",
"+/-", "0", ".", LV_SYMBOL_LEFT, LV_SYMBOL_RIGHT, ""
};
const lv_btnmatrix_ctrl_t ctrl_number[] =
{
LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KEYBOARD_CTRL_BTN_FLAGS | 2,
LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KEYBOARD_CTRL_BTN_FLAGS | 2,
LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), 2,
LV_KEYBOARD_CTRL_BTN_FLAGS | 1, LV_KB_BTN(1), 1, 1, 1
};
const char * layout_select[] =
{
" ","小写键盘","大写键盘","数字键盘","特殊符号"," ",""
};
const lv_btnmatrix_ctrl_t ctrl_select[] =
{
LV_BTNMATRIX_CTRL_HIDDEN,LV_KEYBOARD_CTRL_BTN_FLAGS |1,LV_KEYBOARD_CTRL_BTN_FLAGS |1,LV_KEYBOARD_CTRL_BTN_FLAGS |1,LV_KEYBOARD_CTRL_BTN_FLAGS |1,LV_BTNMATRIX_CTRL_HIDDEN
};
const char * layout_special_symbols[] =
{
"`", "~", "!", "@", "#", "$", "%", "^", "&", LV_SYMBOL_BACKSPACE, "\n",
"+", "-", "*", "/", "|", "=", ":", "<", ">", "(", ")", "\n",
"\\", "_", "\"", "'", ".", "?", ";", "{", "}", "[", "]", "\n",
LV_SYMBOL_KEYBOARD, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""
};
const lv_btnmatrix_ctrl_t ctrl_special_symbols[] =
{
LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_BTNMATRIX_CTRL_CHECKED | 2,
LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1),
LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1), LV_KB_BTN(1),
LV_KEYBOARD_CTRL_BTN_FLAGS | 2, LV_BTNMATRIX_CTRL_CHECKED | 2, 6, LV_BTNMATRIX_CTRL_CHECKED | 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2
};
void lv_virtualkeyboard_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
{
LV_UNUSED(class_p);
LV_TRACE_OBJ_CREATE("begin");
lv_obj_set_size(obj, LV_PCT(100), LV_PCT(55));
lv_obj_align(obj,LV_ALIGN_BOTTOM_MID,0,0);
lv_virtualKeyboard_t * virtualKeyboard = (lv_virtualKeyboard_t *)obj;
virtualKeyboard->chineseCharacterPanel_container = lv_obj_create(obj);
virtualKeyboard->chineseCharacterPanel = lv_btnmatrix_create(virtualKeyboard->chineseCharacterPanel_container);
virtualKeyboard->editPanel = lv_btnmatrix_create(obj);
virtualKeyboard->inputChineseCharacterLabel = lv_label_create(obj);
virtualKeyboard->textArea = nullptr;
virtualKeyboard->keyboardMode = KeyboardMode::Lowercase;
virtualKeyboard->isChinese = false;
virtualKeyboard->layouts.push_back(KeyboardLayout{layout_Lowercase_letters, ctrl_Lowercase_letters});
virtualKeyboard->layouts.push_back(KeyboardLayout{layout_Capital_letters, ctrl_Lowercase_letters});
virtualKeyboard->layouts.push_back(KeyboardLayout{layout_number, ctrl_number});
virtualKeyboard->layouts.push_back(KeyboardLayout{layout_select, ctrl_select});
virtualKeyboard->layouts.push_back(KeyboardLayout{layout_special_symbols, ctrl_special_symbols});
lv_obj_set_style_text_font(virtualKeyboard->editPanel, &lv_font_siyuanheiti16, 0);
lv_obj_set_style_text_font(virtualKeyboard->chineseCharacterPanel, &lv_font_siyuanheiti16, 0);
lv_obj_set_size(virtualKeyboard->editPanel, LV_PCT(100), LV_PCT(75));
lv_obj_set_size(virtualKeyboard->chineseCharacterPanel_container, LV_PCT(100), LV_PCT(15));
lv_obj_set_height(virtualKeyboard->chineseCharacterPanel, LV_PCT(98));
lv_obj_align_to(virtualKeyboard->editPanel, obj, LV_ALIGN_BOTTOM_MID, 0, 0);
lv_obj_align_to(virtualKeyboard->chineseCharacterPanel_container, virtualKeyboard->editPanel, LV_ALIGN_OUT_TOP_MID, 0, 0);
lv_obj_set_height(virtualKeyboard->inputChineseCharacterLabel,LV_PCT(10));
lv_obj_align_to(virtualKeyboard->inputChineseCharacterLabel, virtualKeyboard->chineseCharacterPanel_container, LV_ALIGN_OUT_TOP_LEFT, 0, 0);
lv_label_set_text(virtualKeyboard->inputChineseCharacterLabel,"");
auto layout = virtualKeyboard->layouts[0];
lv_btnmatrix_set_map(virtualKeyboard->editPanel,layout.layout);
lv_btnmatrix_set_ctrl_map(virtualKeyboard->editPanel,layout.controls);
lv_obj_add_flag(virtualKeyboard->editPanel, LV_OBJ_FLAG_EVENT_BUBBLE);
lv_obj_add_flag(virtualKeyboard->chineseCharacterPanel,LV_OBJ_FLAG_EVENT_BUBBLE);
lv_obj_add_flag(virtualKeyboard->chineseCharacterPanel_container,LV_OBJ_FLAG_EVENT_BUBBLE);
lv_group_remove_obj(virtualKeyboard->editPanel);//有这行才聚焦
lv_group_remove_obj(virtualKeyboard->chineseCharacterPanel);//有这行才聚焦
lv_obj_add_event_cb(obj, lv_virtualKeyboard_def_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_set_style_base_dir(obj, LV_BASE_DIR_LTR, 0);
lv_style_init(&virtualKeyboard->chineseCharacterPanel_style_main);
lv_style_set_pad_all(&virtualKeyboard->chineseCharacterPanel_style_main,1);
lv_style_set_border_width(&virtualKeyboard->chineseCharacterPanel_style_main,0);
lv_style_set_bg_opa(&virtualKeyboard->chineseCharacterPanel_style_main,LV_OPA_TRANSP);
lv_obj_add_style(virtualKeyboard->chineseCharacterPanel,&virtualKeyboard->chineseCharacterPanel_style_main,LV_PART_MAIN);
lv_style_init(&virtualKeyboard->chineseCharacterPanel_style_item);
lv_style_set_pad_all(&virtualKeyboard->chineseCharacterPanel_style_item,1);
lv_obj_add_style(virtualKeyboard->chineseCharacterPanel,&virtualKeyboard->chineseCharacterPanel_style_item,LV_PART_ITEMS);
lv_style_init(&virtualKeyboard->chineseCharacterPanel_container_style);
lv_style_set_pad_all(&virtualKeyboard->chineseCharacterPanel_container_style,0);
lv_obj_add_style(virtualKeyboard->chineseCharacterPanel_container,&virtualKeyboard->chineseCharacterPanel_container_style,LV_PART_MAIN);
lv_obj_set_scroll_dir(virtualKeyboard->chineseCharacterPanel_container,LV_DIR_LEFT | LV_DIR_RIGHT);//可以左右滚动
lv_obj_set_scrollbar_mode(virtualKeyboard->chineseCharacterPanel_container,LV_SCROLLBAR_MODE_OFF);
for (int i = 0; i < chineseWord_maxSize; ++i)
{
virtualKeyboard->inputChineWordArray[i] = "";
}
virtualKeyboard->inputChineWordArray[chineseWord_maxSize] = "";
lv_btnmatrix_set_map(virtualKeyboard->chineseCharacterPanel, virtualKeyboard->inputChineWordArray);
}
void lv_virtualkeyboard_destructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
{
}
void lv_virtualKeyboard_set_textarea(lv_obj_t *obj, lv_obj_t *textArea)
{
if(textArea)
{
LV_ASSERT_OBJ(textArea, &lv_textarea_class);
}
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_virtualKeyboard_t * keyboard = (lv_virtualKeyboard_t *)obj;
lv_obj_set_style_text_font(textArea, &lv_font_siyuanheiti16, 0);
if(keyboard->textArea)
{
lv_obj_clear_state(obj, LV_STATE_FOCUSED);
}
keyboard->textArea = textArea;
if(keyboard->textArea)
{
lv_obj_add_flag(obj, LV_STATE_FOCUSED);
}
}
bool isSingleAlpha(const char* str)
{
if (strlen(str) != 1)
{
return false;
}
return (isalpha(*str) && isalpha(tolower(*str)));// 输入字符是字母且小写转换后也是字母,符合条件
}
void lv_virtualKeyboard_def_event_cb(lv_event_t *e)
{
lv_obj_t * obj = lv_event_get_current_target(e);//整个控件
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_virtualKeyboard_t * keyboard = (lv_virtualKeyboard_t *)obj;
lv_obj_t * btnmatrix = lv_event_get_target(e);// 上/下部分的按钮矩阵
if(btnmatrix == keyboard->editPanel)
{
uint16_t btn_id = lv_btnmatrix_get_selected_btn(btnmatrix);
if(btn_id == LV_BTNMATRIX_BTN_NONE)
return;
const char * txt = lv_btnmatrix_get_btn_text(btnmatrix, lv_btnmatrix_get_selected_btn(btnmatrix));
if(!txt)
return;
if(strcmp(txt, LV_SYMBOL_CLOSE) == 0)
{
lv_res_t res = lv_event_send(btnmatrix, LV_EVENT_CANCEL, NULL);
if(res != LV_RES_OK)
return;
if(keyboard->textArea)
{
res = lv_event_send(keyboard->textArea, LV_EVENT_CANCEL, NULL);
if(res != LV_RES_OK)
return;
}
return;
}
else if(strcmp(txt, LV_SYMBOL_OK) == 0)
{
// lv_res_t res = lv_event_send(btnmatrix, LV_EVENT_READY, NULL);
// if(res != LV_RES_OK)
// return;
// if(keyboard->textArea)
// {
// res = lv_event_send(keyboard->textArea, LV_EVENT_READY, NULL);
// if(res != LV_RES_OK)
// return;
// }
// return;
}
else if(strcmp(txt, LV_SYMBOL_KEYBOARD) == 0)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Select);
return;
}
else if(strcmp(txt, "大小写") == 0)
{
if(keyboard->keyboardMode == KeyboardMode::Lowercase)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Capital);
}
else if(keyboard->keyboardMode == KeyboardMode::Capital)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Lowercase);
}
return;
}
else if(strcmp(txt, "数字") == 0)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Number);
return;
}
else if(strcmp(txt, "小写键盘") == 0)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Lowercase);
return;
}
else if(strcmp(txt, "大写键盘") == 0)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Capital);
return;
}
else if(strcmp(txt, "数字键盘") == 0)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Number);
return;
}
else if(strcmp(txt, "特殊符号") == 0)
{
lv_virtualKeyboard_set_keyboardMode(obj,KeyboardMode::Special_symbols);
return;
}
else if(strcmp(txt, "中/英文") == 0)
{
keyboard->isChinese = !keyboard->isChinese;
if(!keyboard->inputChineWord.empty())
{
closeChineseCharacterPanel(keyboard);
}
return;
}
if(!keyboard->textArea)
return;
if(strcmp(txt, LV_SYMBOL_NEW_LINE) == 0)
{
lv_textarea_add_char(keyboard->textArea, '\n');
if(lv_textarea_get_one_line(keyboard->textArea))
{
lv_res_t res = lv_event_send(keyboard->textArea, LV_EVENT_READY, NULL);
if(res != LV_RES_OK)
return;
}
}
else if(strcmp(txt, LV_SYMBOL_LEFT) == 0)
{
lv_textarea_cursor_left(keyboard->textArea);
}
else if(strcmp(txt, LV_SYMBOL_RIGHT) == 0)
{
lv_textarea_cursor_right(keyboard->textArea);
}
else if(strcmp(txt, LV_SYMBOL_BACKSPACE) == 0)
{
if(keyboard->isChinese)
{
if (keyboard->inputChineWord.empty())
{
lv_textarea_del_char(keyboard->textArea);
}
else
{
keyboard->inputChineWord.erase(keyboard->inputChineWord.length() - 1); // 去掉末尾的一个字符
updateMatchChinaWordList(keyboard);
}
}
else
{
lv_textarea_del_char(keyboard->textArea);
}
}
else if(strcmp(txt, "+/-") == 0)
{
uint16_t cur = lv_textarea_get_cursor_pos(keyboard->textArea);
const char * ta_txt = lv_textarea_get_text(keyboard->textArea);
if(ta_txt[0] == '-')
{
lv_textarea_set_cursor_pos(keyboard->textArea, 1);
lv_textarea_del_char(keyboard->textArea);
lv_textarea_add_char(keyboard->textArea, '+');
lv_textarea_set_cursor_pos(keyboard->textArea, cur);
}
else if(ta_txt[0] == '+')
{
lv_textarea_set_cursor_pos(keyboard->textArea, 1);
lv_textarea_del_char(keyboard->textArea);
lv_textarea_add_char(keyboard->textArea, '-');
lv_textarea_set_cursor_pos(keyboard->textArea, cur);
}
else
{
lv_textarea_set_cursor_pos(keyboard->textArea, 0);
lv_textarea_add_char(keyboard->textArea, '-');
lv_textarea_set_cursor_pos(keyboard->textArea, cur + 1);
}
}
else if(isSingleAlpha(txt))
{
if(keyboard->isChinese)
{
keyboard->inputChineWord += tolower(*txt);
updateMatchChinaWordList(keyboard);
}
else
{
lv_textarea_add_text(keyboard->textArea, txt);
}
}
else
{
lv_textarea_add_text(keyboard->textArea, txt);
}
}
else if(btnmatrix == keyboard->chineseCharacterPanel)
{
uint16_t btn_id = lv_btnmatrix_get_selected_btn(btnmatrix);
if(btn_id == LV_BTNMATRIX_BTN_NONE)
return;
const char * txt = lv_btnmatrix_get_btn_text(btnmatrix, lv_btnmatrix_get_selected_btn(btnmatrix));
if(!txt)
return;
lv_textarea_add_text(keyboard->textArea, txt);
closeChineseCharacterPanel(keyboard);
}
}
void lv_virtualKeyboard_set_keyboardMode(lv_obj_t * obj,KeyboardMode mode)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_virtualKeyboard_t * keyboard = (lv_virtualKeyboard_t *)obj;
auto layout = keyboard->layouts[mode];
lv_btnmatrix_set_map(keyboard->editPanel,layout.layout);
lv_btnmatrix_set_ctrl_map(keyboard->editPanel,layout.controls);
keyboard->keyboardMode = mode;
if(!keyboard->inputChineWord.empty())
{
closeChineseCharacterPanel(keyboard);
}
}
void updateMatchChinaWordList(lv_virtualKeyboard_t * keyboard)
{
std::vector<std::string> vec;
if(!keyboard->inputChineWord.empty())
{
vec = utf8Chinese::getInstance()->getHanziList(keyboard->inputChineWord);
}
lv_coord_t wordAllLength{0};
for(size_t i = 0;i < vec.size();++i)
{
const auto & str = vec[i];
keyboard->inputChineWordArray[i] = str.c_str();
wordAllLength += (20 * str.size());
}
for(size_t i = vec.size();i < chineseWord_maxSize;++i)
{
keyboard->inputChineWordArray[i] = "";
}
lv_btnmatrix_set_map(keyboard->chineseCharacterPanel, keyboard->inputChineWordArray);
lv_obj_set_width(keyboard->chineseCharacterPanel,/*std::max(*/wordAllLength/*,LV_HOR_RES)*/);
for (int i = 0; i < chineseWord_maxSize; ++i)
{
lv_btnmatrix_set_btn_ctrl(keyboard->chineseCharacterPanel,i,LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_NO_REPEAT);
}
lv_label_set_text(keyboard->inputChineseCharacterLabel,keyboard->inputChineWord.c_str());
}
void closeChineseCharacterPanel(lv_virtualKeyboard_t * keyboard)
{
for (int i = 0; i < chineseWord_maxSize; ++i)
{
keyboard->inputChineWordArray[i] = "";
}
lv_btnmatrix_set_map(keyboard->chineseCharacterPanel, keyboard->inputChineWordArray);
keyboard->inputChineWord.clear();
lv_label_set_text(keyboard->inputChineseCharacterLabel,"");
lv_obj_scroll_to_x(keyboard->chineseCharacterPanel_container,0,LV_ANIM_OFF);
}
#ifndef UTF8CHINESE_H
#define UTF8CHINESE_H
#include <map>
#include <vector>
class utf8Chinese
{
public:
static utf8Chinese *getInstance();
std::vector<std::string> getHanziList(const std::string& pinyin);
private:
utf8Chinese();
std::multimap<std::string,std::string> pinyin_map;
};
#endif // UTF8CHINESE_H
使用:
lv_obj_t *ta = lv_textarea_create(lv_scr_act());
lv_obj_t * keyBoard = lv_virtualkeyboard_create(lv_scr_act());
lv_virtualKeyboard_set_textarea(keyBoard,ta);
效果:
有个管理汉字的类太大贴不上来,完整代码免费下载。