微调框 (Spinbox)

微调框用于数值调整,有时候我们希望获取一个用户输入的数值,但是又不希望弹出键盘,可以使用微调框。
## 示例代码
```lua
-- 回调函数
function spinbox_increment_event_cb(obj, event)
if event == lvgl.EVENT_SHORT_CLICKED then
lvgl.spinbox_increment(spinbox)
end
end
function spinbox_decrement_event_cb(obj, event)
if event == lvgl.EVENT_SHORT_CLICKED then
lvgl.spinbox_decrement(spinbox)
end
end
-- 创建按钮
function cBt(cont, txt, cb)
local btn = lvgl.btn_create(cont, nil)
lvgl.obj_set_event_cb(btn, cb)
local label = lvgl.label_create(btn, nil)
lvgl.label_set_text(label, txt)
end
-- 容器
cont = lvgl.cont_create(lvgl.scr_act(), nil)
lvgl.disp_load_scr(cont)
lvgl.cont_set_fit(cont, lvgl.FIT_TIGHT)
lvgl.obj_align(cont, nil, lvgl.ALIGN_CENTER, 0, 0)
lvgl.cont_set_layout(cont, lvgl.LAYOUT_CENTER)
-- 按钮一
cBt(cont, "plus", spinbox_increment_event_cb)
-- 微调框
spinbox = lvgl.spinbox_create(cont, nil)
lvgl.spinbox_set_range(spinbox, -1000, 25000)
lvgl.spinbox_set_digit_format(spinbox, 5, 2)
lvgl.spinbox_step_prev(spinbox)
-- 按钮二
cBt(cont, "minus", spinbox_decrement_event_cb)
```
## 创建
微调框的创建函数是 `spinbox_create`,创建也比较简单。
```lua
spinbox = lvgl.spinbox_create(cont, nil)
```
这里有点需要注意,创建的微调框只有这个:

增大减小按钮是需要自己通过代码创建的,所以上面的示例代码看起来比较多。示例创建的微调框是这个样子:

## 数值调整
微调框的数值调整函数有两个,加一个单位`lvgl.spinbox_increment`,减一个单位`lvgl.spinbox_decrement`。
```lua
lvgl.spinbox_increment(spinbox)
lvgl.spinbox_decrement(spinbox)
```
`lvgl.spinbox_set_range` 可以设置微调框的数值显示范围,`lvgl.spinbox_set_value` 可以直接手动设置数值,`lvgl.spinbox_set_step` 是需要和上面的 `lvgl.spinbox_increment`,`lvgl.spinbox_decrement`两个函数配合使用的,增减的步长默认是 1,这个函数还是很有用的,我们可以把步长设置成 `7`,然后看看 `1000 - 7` 到底是多少。
```lua
lvgl.spinbox_set_range(spinbox, 0, 1000)
lvgl.spinbox_set_value(spinbox, 1000)
lvgl.spinbox_set_digit_format(spinbox, 4, 0)
lvgl.spinbox_set_step(spinbox, 7)
```

## 格式
通过函数 `lvgl.spinbox_set_digit_format` 可以设置微调框的数字显示格式,第一个参数是微调框的显示位数,是总位数。第二个参数是小数点前面的位数,0 表示没有小数点。除了位数显示,还可以在符号和数字之间添加空格 `lvgl.spinbox_set_padding_left`。
```
lvgl.spinbox_set_digit_format(spinbox, 8, 4)
lvgl.spinbox_set_padding_left(spinbox, 3)
```

## 事件
数值更改时会有 `lvgl.EVENT_VALUE_CHANGED` 消息收到,但是结合一般微调框的使用方法,实际上都是对按钮添加回调,然后通过函数去更改微调框的数值。

## API
### lvgl.spinbox_create
|调用|lvgl.spinbox_create(par, copy)|
|-|-|
|功能|创建一个微调框对象|
|返回|指向创建的微调框的指针|
|参数||
|par|指向对象的指针, 它将是新键对象的父对象|
|copy|指向微调框对象的指针, 如果不为 nil, 则将从其复制新对象|
### lvgl.spinbox_set_range
|调用|lvgl.spinbox_set_range(spinbox, min, max)|
|-|-|
|功能|设置微调框的最小值和最大值|
|参数||
|spinbox|指向微调框对象的指针|
|min|最小值|
|max|最大值|
### lvgl.spinbox_set_range
|调用|lvgl.spinbox_set_range(spinbox, val)|
|-|-|
|功能|设置微调框的数值|
|参数||
|spinbox|指向微调框对象的指针|
|val|需要设置的数值|
### lvgl.spinbox_set_digit_format
|调用|lvgl.spinbox_set_digit_format(spinbox, count, pos)|
|-|-|
|功能|设置微调框数值格式|
|参数||
|spinbox|指向微调框对象的指针|
|count|显示总位数|
|pos|小数点位置,也可以理解成整数位数,0 表示没有小数点。|
### lvgl.spinbox_set_step
|调用|lvgl.spinbox_set_step(spinbox, step)|
|-|-|
|功能|设置微调框的设置步长|
|参数||
|spinbox|指向微调框对象的指针|
|step|需要设置的设置步长|
### lvgl.spinbox_set_padding_left
|调用|lvgl.spinbox_set_padding_left(spinbox, n)|
|-|-|
|功能|设置微调框的空格个数|
|参数||
|spinbox|指向微调框对象的指针|
|n|符号位和数值之间空格的个数|
### lvgl.spinbox_get_value
|调用|lvgl.spinbox_get_value(spinbox)|
|-|-|
|功能|获取微调框的数值|
|返回|微调框的数值|
|参数||
|spinbox|指向微调框对象的指针|
### lvgl.spinbox_increment
|调用|lvgl.spinbox_increment(spinbox)|
|-|-|
|功能|微调框的数值增加一个单位|
|参数||
|spinbox|指向微调框对象的指针|
### lvgl.spinbox_decrement
|调用|lvgl.spinbox_decrement(spinbox)|
|-|-|
|功能|微调框的数值减小一个单位|
|参数||
|spinbox|指向微调框对象的指针|
[参考链接(C语言)](https://docs.lvgl.io/master/widgets/extra/spinbox.html)