| **银杏科技有限公司旗下技术文档发布平台** ||||
|技术支持电话|**0379-69926675-801**|||
|技术支持邮件|Gingko@vip.163.com|||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^
| V1.0 | 2021-01-02 | yang | 初次建立 |
===== 实验三十一:lv_spinbox微调框 =====
==== 一、微调框 ====
微调框控件包含一个数字文本,其值可通过**按键**或 **API** 函数增加或减少。微调框的主体部分被称为 **LV_SPINBOX_PART_BG** ,它具有典型背景样式属性的矩形背景,还使用 **text** 样式属性描述数字文本标签的样式。
文本上的光标** LV_SPINBOX_PART_CURSOR** 是一个虚拟部分,用户通过点击数字的不同位数可以移动光标,光标闪烁的区域为当前修改区。关于光标的详细说明请参考文本域控件章节内容。
==== 二、设定格式 ====
函数 **lv_spinbox_set_digit_format(spinbox, digit_count, separator_position)** 可以设置微调框数字的格式。参数**digit_count** 设置位数,添加前导零以填充左侧的空间。 参数**separator_position** 设置小数点前的位数,若为0 表示没有小数点。
{{ :icore4t:icore4t_rtt_lvgl_31_1.png?direct |}}
lv_spinbox_set_digit_format(spinbox, 5, 2); /* 设置数字格式 */
使用 **lv_spinbox_set_padding_left(spinbox, cnt)** 可以在符号与最左边数字之间添加**cnt**个字符间距,注意,间距设置过大控件会卡死。
{{ :icore4t:icore4t_rtt_lvgl_31_2.png?direct |}}
lv_spinbox_set_padding_left(spinbox, 1); /* 设置符号与字符的间距 */
==== 三、设定值和范围 ====
**lv_spinbox_set_range(spinbox, min, max)** 用来设置微调框值的范围,注意这里的最大最小参数是忽略小数点但正负符号有效的。例如,设置微调框位数为五位,小数点前为两位,值的范围为**(spinbox, -10000, 90000)**,则实际可显示的范围为**[-10.000 , 90.000]**。
除了通过按钮的回调函数来修改微调框的值,用户还可以使用命令**lv_spinbox_set_value(spinbox, num)** 手动设置微调框的值。
使用**lv_spinbox_increment(spinbox)** 和 **lv_spinbox_decrement(spinbox)** 可以增加/减少 微调框的值,而函数**lv_spinbox_set_step(spinbox, step)** 可以设置增量减量。
==== 四、事件 ====
微调框除了通用事件外,还发送以下特殊事件:
* **LV_EVENT_VALUE_CHANGED** 值更改时发送(该值作为**int32_t**类型的事件数据)。
* **LV_EVENT_INSERT** 由文本区域发送,但不应被使用。
以下键值由按钮处理:
* **LV_KEY_LEFT / RIGHT** 使用键盘向左/向右移动光标,使用编码器递减/递增所选数字。
* **LY_KEY_ENTER** 应用选定的选项(发送 **LV_EVENT_VALUE_CHANGED** 事件并关闭列表)
* **LV_KEY_ENTER** 使用编码器获得净位数,当改变的位数为最后一位后的位数时,会跳到第一位。
{{ :icore4t:icore4t_rtt_lvgl_31_3.gif?direct |}}
static lv_obj_t * spinbox;
static void lv_spinbox_increment_event_cb(lv_obj_t * btn, lv_event_t e)
{ /* 加号按钮的回调函数 */
if(e == LV_EVENT_SHORT_CLICKED || e == LV_EVENT_LONG_PRESSED_REPEAT) {
lv_spinbox_increment(spinbox); /* 增加值 */
}
}
static void lv_spinbox_decrement_event_cb(lv_obj_t * btn, lv_event_t e)
{ /* 减号按钮的回调函数 */
if(e == LV_EVENT_SHORT_CLICKED || e == LV_EVENT_LONG_PRESSED_REPEAT) {
lv_spinbox_decrement(spinbox); /* 减少值 */
}
}
void lv_gui_run(void){
lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */
spinbox = lv_spinbox_create(lv_scr_act(), NULL); /* 创建微调框对象 */
lv_spinbox_set_range(spinbox, -10000, 90000); /* 设置值范围 */
lv_spinbox_set_digit_format(spinbox, 5, 2); /* 设置数字格式 */
lv_spinbox_step_prev(spinbox);
lv_obj_set_width(spinbox, 100); /* 设置宽度 */
lv_obj_align(spinbox, NULL, LV_ALIGN_CENTER, 0, 0); /* 设置位置 */
lv_spinbox_set_padding_left(spinbox, 1); /* 设置符号与数字的间距 */
lv_coord_t h = lv_obj_get_height(spinbox); /* 获得微调框的高度 */
lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL); /* 创建按钮对象 */
lv_obj_set_size(btn, h, h); /* 设置按钮宽高 */
lv_obj_align(btn, spinbox, LV_ALIGN_OUT_RIGHT_MID, 10, 0);/* 设置位置 */
lv_theme_apply(btn, LV_THEME_SPINBOX_BTN); /* 应用微调框按钮主题 */
lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_PLUS); /* 设置加号图标 */
lv_obj_set_event_cb(btn, lv_spinbox_increment_event_cb); /* 绑定回调函数 */
btn = lv_btn_create(lv_scr_act(), btn);
lv_obj_align(btn, spinbox, LV_ALIGN_OUT_LEFT_MID, -10, 0);
lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_MINUS); /* 设置减号图标 */
lv_obj_set_event_cb(btn, lv_spinbox_decrement_event_cb);
}