文本框是一个基础对象,其上面有一个标签(Label)和一个光标(Cursor)。
可以向文本框中添加文本或字符。长行会被换行,当文本内容变得足够长时,可以滚动文本框。
1.常用方法
创建textarea文本框:
lv_obj_t * lv_textarea_create(lv_obj_t * parent)
设置只有一行:
void lv_textarea_set_one_line(lv_obj_t * obj, bool en)
2.代码实现
void btnm_event_handler(lv_event_t* e){
int code = lv_event_get_code(e);
lv_obj_t* target = lv_event_get_target(e);
lv_obj_t* textarea = lv_event_get_user_data(e);
if(code == LV_EVENT_VALUE_CHANGED){
// 获取单击的按钮编号
uint16_t index = lv_btnmatrix_get_selected_btn(target);
// 获取单击的按钮文本
const char* btn_text = lv_btnmatrix_get_btn_text(target,index);
// 条件判断
if(strcmp(btn_text,LV_SYMBOL_BACKSPACE) == 0){
lv_textarea_del_char(textarea);
}else if (strcmp(btn_text,LV_SYMBOL_NEW_LINE) == 0)
{
printf("enter clicked\n");
lv_event_send(textarea, LV_EVENT_READY, NULL);
}else{
// 向文本框中填入内
lv_textarea_add_text(textarea,btn_text);
}
}
}
static void textarea_event_handler(lv_event_t * e)
{
lv_obj_t * ta = lv_event_get_target(e);
printf("Enter was pressed. The current text is: %s", lv_textarea_get_text(ta));
}
void demo6(){
// 文本框
lv_obj_t* textarea = lv_textarea_create(lv_scr_act());
lv_textarea_set_one_line(textarea,true);
lv_obj_align(textarea,LV_ALIGN_TOP_MID,0,10);
lv_obj_set_width(textarea,220);
lv_obj_add_state(textarea, LV_STATE_FOCUSED);
lv_obj_add_event_cb(textarea, textarea_event_handler, LV_EVENT_READY, textarea);
// 创建矩阵按钮
lv_obj_t* btnm = lv_btnmatrix_create(lv_scr_act());
// 设置矩阵按钮的显示
lv_btnmatrix_set_map(btnm,map);
lv_obj_set_width(btnm,220);
lv_obj_align(btnm,LV_ALIGN_TOP_MID,0,80);
lv_obj_clear_flag(btnm, LV_OBJ_FLAG_CLICK_FOCUSABLE);
// 事件处理
lv_obj_add_event_cb(btnm,btnm_event_handler,LV_EVENT_VALUE_CHANGED,textarea);
}
效果: