================================== 数字调整框(lv_spinbox) ================================== 概述 ################################## 数字调整框包含一个数字文本,可通过按键或API函数增加或减少数字。 数字调整框的下面是修改后的 `文本框(lv_textarea)`_ 。 .. _文本框(lv_textarea): http://lvgl.100ask.net/documentation/04_widgets/32_textarea.html 零件和样式 ################################## 数字调整框的主要部分称为 ``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** 由父“文本”区域发送,但不应使用。 了解有关 `事件`_ 的更多内容。 .. _通用事件: http://lvgl.100ask.net/documentation/03_overview/03_events.html#id2 .. _特殊事件: http://lvgl.100ask.net/documentation/03_overview/03_events.html#id7 .. _事件: http://lvgl.100ask.net/documentation/03_overview/03_events.html 按键处理 ################################## 数字调整框支持一下按键: - **LV_KEY_LEFT/RIGHT** 使用键盘向左/向右移动光标。使用编码器递减/递增所选数字。 - **LY_KEY_ENTER** 应用选定的选项(发送LV_EVENT_VALUE_CHANGED事件并关闭下拉列表) - **LV_KEY_ENTER** 随着编码器得到的净数字。跳到最后一个之后的第一个。 了解有关 `按键`_ 的更多内容。 .. _按键: http://lvgl.100ask.net/documentation/03_overview/05_indev.html 范例 ################################## 简单的数字调整框 ********************************** .. figure:: http://photos.100ask.net/lvgl/04_widgets/27_spinbox/01_lv_ex_spinbox_1.png 简单的数字调整框 上述效果的示例代码: .. code-block:: c :linenos: #include "../../../lv_examples.h" #include #if LV_USE_SPINBOX 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_ex_spinbox_1(void) { spinbox = lv_spinbox_create(lv_scr_act(), NULL); lv_spinbox_set_range(spinbox, -1000, 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_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, 5, 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, -5, 0); lv_obj_set_event_cb(btn, lv_spinbox_decrement_event_cb); lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_MINUS); } #endif 相关API ################################## TODO