使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第三十三讲)
这一期讲解lvgl中的按键组的使用,顾名思义按键组就是按键组成的矩阵,用户可以添加行或者列,也可以单独添加某一行或者列的元素。
按钮矩阵非常适合创建规则排列的按键组,比如计算器键盘、遥控器界面等。
• 创建与布局:通过一个字符串数组来定义按钮的布局,换行符\n表示开始新的一行。你可以使用lv_btnmatrix_set_btn_width()来控制同一行内按钮的相对宽度。
• 控制按钮:每个按钮都可以通过设置控制位来赋予特殊行为,比如LV_BUTTONMATRIX_CTRL_CHECKABLE可以让按钮具备切换状态。
• 事件处理:它会发送LV_EVENT_VALUE_CHANGED事件,你可以在事件回调函数中用lv_btnmatrix_get_active_btn_text()来获取被按下的按钮文本。
以下是代码:
//Write codes screen_1_btnm_1
//创建按键矩阵对象
ui->screen_1_btnm_1 = lv_btnmatrix_create(ui->screen_1);
//定义按键文本映射数组
static const char *screen_1_btnm_1_text_map[] = {“1”, “2”, “3”, “\n”, “4”, “5”, “6”, “\n”, “7”, “8”, “9”, “”,};
//设置按键矩阵的映射文本
lv_btnmatrix_set_map(ui->screen_1_btnm_1, screen_1_btnm_1_text_map);
//设置位置以及大小
lv_obj_set_pos(ui->screen_1_btnm_1, 66, 78);
lv_obj_set_size(ui->screen_1_btnm_1, 337, 304);
//Write style for screen_1_btnm_1, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT.
//边框设置 宽度1像素 透明度255(完全不透明)颜色浅灰色
lv_obj_set_style_border_width(ui->screen_1_btnm_1, 1, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(ui->screen_1_btnm_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_border_color(ui->screen_1_btnm_1, lv_color_hex(0xc9c9c9), LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_border_side(ui->screen_1_btnm_1, LV_BORDER_SIDE_FULL, LV_PART_MAIN|LV_STATE_DEFAULT);
//内边距设置
lv_obj_set_style_pad_top(ui->screen_1_btnm_1, 16, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(ui->screen_1_btnm_1, 16, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(ui->screen_1_btnm_1, 16, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(ui->screen_1_btnm_1, 16, LV_PART_MAIN|LV_STATE_DEFAULT);
//按钮间距设置
lv_obj_set_style_pad_row(ui->screen_1_btnm_1, 8, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_pad_column(ui->screen_1_btnm_1, 8, LV_PART_MAIN|LV_STATE_DEFAULT);
//背景和圆角设置 圆角半径4像素 背景透明度255(完全不透明)背景颜色白色 渐变方向无渐变(纯色背景)
lv_obj_set_style_radius(ui->screen_1_btnm_1, 4, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui->screen_1_btnm_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui->screen_1_btnm_1, lv_color_hex(0xffffff), LV_PART_MAIN|LV_STATE_DEFAULT);
lv_obj_set_style_bg_grad_dir(ui->screen_1_btnm_1, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT);
//Write style for screen_1_btnm_1, Part: LV_PART_ITEMS, State: LV_STATE_DEFAULT.
//按键样式设置
lv_obj_set_style_border_width(ui->screen_1_btnm_1, 1, LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(ui->screen_1_btnm_1, 255, LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_border_color(ui->screen_1_btnm_1, lv_color_hex(0xc9c9c9), LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_border_side(ui->screen_1_btnm_1, LV_BORDER_SIDE_FULL, LV_PART_ITEMS|LV_STATE_DEFAULT);
//文本样式设置 白色文本 16像素 完全不透明
lv_obj_set_style_text_color(ui->screen_1_btnm_1, lv_color_hex(0xffffff), LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui->screen_1_btnm_1, &lv_font_montserratMedium_16, LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui->screen_1_btnm_1, 255, LV_PART_ITEMS|LV_STATE_DEFAULT);
//按键背景样式 按键圆角4像素 背景颜色蓝色 无阴影
lv_obj_set_style_radius(ui->screen_1_btnm_1, 4, LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui->screen_1_btnm_1, 255, LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui->screen_1_btnm_1, lv_color_hex(0x2195f6), LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_bg_grad_dir(ui->screen_1_btnm_1, LV_GRAD_DIR_NONE, LV_PART_ITEMS|LV_STATE_DEFAULT);
lv_obj_set_style_shadow_width(ui->screen_1_btnm_1, 0, LV_PART_ITEMS|LV_STATE_DEFAULT);
本文章由威三学社出品
对课程感兴趣可以私信联系
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)