数字调整框(lv_spinbox)

概述

数字调整框包含一个数字文本,可通过按键或API函数增加或减少数字。 数字调整框的下面是修改后的 文本框(lv_textarea)

零件和样式

数字调整框的主要部分称为 LV_SPINBOX_PART_BG ,它是使用所有典型背景样式属性的矩形背景。它还使用其文本样式属性描述标签的样式。

LV_SPINBOX_PART_CURSOR 是描述光标的虚拟部分。阅读文本区域文档以获取详细说明。

用法

设定格式

lv_spinbox_set_digit_format(spinbox, digit_count, separator_position) 设置数字的格式。 digit_count 设置位数。前导零被添加以填充左侧的空间。 spacer_position 设置小数点前的位数。 0表示没有小数点。

lv_spinbox_set_padding_left(spinbox, cnt) 在符号之间最左边的数字之间添加 cnt “空格”字符。

值和范围

lv_spinbox_set_range(spinbox, min, max) 设置Spinbox的范围。

lv_spinbox_set_value(spinbox, num) 手动设置Spinbox的值。

lv_spinbox_increment(spinbox)lv_spinbox_decrement(spinbox) 递增/递减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 随着编码器得到的净数字。跳到最后一个之后的第一个。

了解有关 按键 的更多内容。

范例

简单的数字调整框

http://photos.100ask.net/lvgl/04_widgets/27_spinbox/01_lv_ex_spinbox_1.png

简单的数字调整框

上述效果的示例代码:

 1    #include "../../../lv_examples.h"
 2    #include <stdio.h>
 3    #if LV_USE_SPINBOX
 4
 5    static lv_obj_t * spinbox;
 6
 7
 8    static void lv_spinbox_increment_event_cb(lv_obj_t * btn, lv_event_t e)
 9    {
10            if(e == LV_EVENT_SHORT_CLICKED || e == LV_EVENT_LONG_PRESSED_REPEAT) {
11                    lv_spinbox_increment(spinbox);
12            }
13    }
14
15    static void lv_spinbox_decrement_event_cb(lv_obj_t * btn, lv_event_t e)
16    {
17            if(e == LV_EVENT_SHORT_CLICKED || e == LV_EVENT_LONG_PRESSED_REPEAT) {
18                    lv_spinbox_decrement(spinbox);
19            }
20    }
21
22
23    void lv_ex_spinbox_1(void)
24    {
25            spinbox = lv_spinbox_create(lv_scr_act(), NULL);
26            lv_spinbox_set_range(spinbox, -1000, 90000);
27            lv_spinbox_set_digit_format(spinbox, 5, 2);
28            lv_spinbox_step_prev(spinbox);
29            lv_obj_set_width(spinbox, 100);
30            lv_obj_align(spinbox, NULL, LV_ALIGN_CENTER, 0, 0);
31
32            lv_coord_t h = lv_obj_get_height(spinbox);
33            lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);
34            lv_obj_set_size(btn, h, h);
35            lv_obj_align(btn, spinbox, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
36            lv_theme_apply(btn, LV_THEME_SPINBOX_BTN);
37            lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_PLUS);
38            lv_obj_set_event_cb(btn, lv_spinbox_increment_event_cb);
39
40            btn = lv_btn_create(lv_scr_act(), btn);
41            lv_obj_align(btn, spinbox, LV_ALIGN_OUT_LEFT_MID, -5, 0);
42            lv_obj_set_event_cb(btn, lv_spinbox_decrement_event_cb);
43            lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_MINUS);
44    }
45
46    #endif

相关API

TODO