Drop-down list (lv_dropdown)
Overview
The drop-down list allows the user to select one value from a list.
The drop-down list is closed by default and displays a single value or a predefined text. When activated (by click on the drop-down list), a list is created from which the user may select one option. When the user selects a new value, the list is deleted again.
The Drop-down list is added to the default group (if it is set). Besides the Drop-down list is an editable object to allow selecting an option with encoder navigation too.
Parts and Styles
The Dropdown widget is built from the elements: "button" and "list" (both not related to the button and list widgets)
List
- LV_PART_MAINThe list itself. Uses the typical background properties.- max_heightcan be used to limit the height of the list.
- LV_PART_SCROLLBARThe scrollbar background, border, shadow properties and width (for its own width) and right padding for the spacing on the right.
- LV_PART_SELECTEDRefers to the currently pressed, checked or pressed+checked option. Also uses the typical background properties.
The list is hidden/shown on open/close. To add styles to it use lv_dropdown_get_list(dropdown) to get the list object. For example:
lv_obj_t * list = lv_dropdown_get_list(dropdown) /*Get the list*/
lv_obj_add_style(list, &my_style, selector)      /*Add the styles to the list*/
Alternatively the theme can be extended with the new styles.
Usage
Options
Set options
Options are passed to the drop-down list as a string with
lv_dropdown_set_options(dropdown, options). Options should be
separated by \n. For example: "First\nSecond\nThird". This
string will be saved in the drop-down list, so it can in a local
variable.
The lv_dropdown_add_option(dropdown, "New option", pos) function
inserts a new option to pos index.
To save memory the options can set from a static(constant) string too
with lv_dropdown_set_static_options(dropdown, options). In this case
the options string should be alive while the drop-down list exists and
lv_dropdown_add_option() can't be used
You can select an option manually with
lv_dropdown_set_selected(dropdown, id), where id is the index of
an option.
Get selected option
The get the index of the selected option, use lv_dropdown_get_selected(dropdown).
lv_dropdown_get_selected_str(dropdown, buf, buf_size) copies the
name of the selected option to buf.
Direction
The list can be created on any side. The default LV_DIR_BOTTOM can
be modified by lv_dropdown_set_dir(dropdown, LV_DIR_LEFT) function.
If the list would be vertically out of the screen, it will be aligned to the edge.
Symbol
A symbol (typically an arrow) can be added to the dropdown list with lv_dropdown_set_symbol(dropdown, LV_SYMBOL_...)
If the direction of the drop-down list is LV_DIR_LEFT the symbol
will be shown on the left, otherwise on the right.
Show selected
The main part can either show the selected option or a static text. If a
static is set with lv_dropdown_set_text(dropdown, "Some text") it
will be shown regardless to th selected option. If the text is NULL
the selected option is displayed on the button.
Manually open/close
To manually open or close the drop-down list the
lv_dropdown_open/close(dropdown) function can be used.
Events
Apart from the Generic events, the following Special events are sent by the drop-down list:
- LV_EVENT_VALUE_CHANGEDSent when the new option is selected or the list is opened/closed.
- LV_EVENT_CANCELSent when the list is closed
- LV_EVENT_READYSent when the list is opened
See the events of the Base object too.
Learn more about Events.
Keys
- LV_KEY_RIGHT/DOWNSelect the next option.
- LV_KEY_LEFT/UPSelect the previous option.
- LV_KEY_ENTERApply the selected option (Sends- LV_EVENT_VALUE_CHANGEDevent and closes the drop-down list).
Learn more about Keys.
Example
Simple Drop down list
C code
View on GitHub#include "../../lv_examples.h"
#if LV_USE_DROPDOWN && LV_BUILD_EXAMPLES
static void event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * obj = lv_event_get_target(e);
    if(code == LV_EVENT_VALUE_CHANGED) {
        char buf[32];
        lv_dropdown_get_selected_str(obj, buf, sizeof(buf));
        LV_LOG_USER("Option: %s", buf);
    }
}
void lv_example_dropdown_1(void)
{
    /*Create a normal drop down list*/
    lv_obj_t * dd = lv_dropdown_create(lv_screen_active());
    lv_dropdown_set_options(dd, "Apple\n"
                            "Banana\n"
                            "Orange\n"
                            "Cherry\n"
                            "Grape\n"
                            "Raspberry\n"
                            "Melon\n"
                            "Orange\n"
                            "Lemon\n"
                            "Nuts");
    lv_obj_align(dd, LV_ALIGN_TOP_MID, 0, 20);
    lv_obj_add_event_cb(dd, event_handler, LV_EVENT_ALL, NULL);
}
#endif
Drop down in four directions
C code
View on GitHub#include "../../lv_examples.h"
#if LV_USE_DROPDOWN && LV_BUILD_EXAMPLES
/**
 * Create a drop down, up, left and right menus
 */
void lv_example_dropdown_2(void)
{
    static const char * opts = "Apple\n"
                               "Banana\n"
                               "Orange\n"
                               "Melon";
    lv_obj_t * dd;
    dd = lv_dropdown_create(lv_screen_active());
    lv_dropdown_set_options_static(dd, opts);
    lv_obj_align(dd, LV_ALIGN_TOP_MID, 0, 10);
    dd = lv_dropdown_create(lv_screen_active());
    lv_dropdown_set_options_static(dd, opts);
    lv_dropdown_set_dir(dd, LV_DIR_BOTTOM);
    lv_dropdown_set_symbol(dd, LV_SYMBOL_UP);
    lv_obj_align(dd, LV_ALIGN_BOTTOM_MID, 0, -10);
    dd = lv_dropdown_create(lv_screen_active());
    lv_dropdown_set_options_static(dd, opts);
    lv_dropdown_set_dir(dd, LV_DIR_RIGHT);
    lv_dropdown_set_symbol(dd, LV_SYMBOL_RIGHT);
    lv_obj_align(dd, LV_ALIGN_LEFT_MID, 10, 0);
    dd = lv_dropdown_create(lv_screen_active());
    lv_dropdown_set_options_static(dd, opts);
    lv_dropdown_set_dir(dd, LV_DIR_LEFT);
    lv_dropdown_set_symbol(dd, LV_SYMBOL_LEFT);
    lv_obj_align(dd, LV_ALIGN_RIGHT_MID, -10, 0);
}
#endif