Keypad and Keyboard

Overview

Full keyboards with all the letters or simple keypads with a few navigation buttons belong in the Keypad category.

You can fully control the user interface without a touchpad or mouse by using only a keypad. It works similarly to the TAB key on a PC to select an element in an application or web page.

Only widgets added to a group can be selected by a keyboard. Learn more at Groups.

Example

/*Create a group and add widgets to it so they can be selected by the keypad*/
lv_group_t * g = lv_group_create();

lv_indev_t * indev = lv_indev_create();
lv_indev_set_type(indev, LV_INDEV_TYPE_KEYPAD);
lv_indev_set_read_cb(indev, keyboard_read);
lv_indev_set_group(indev, g);

...

void keyboard_read(lv_indev_t * indev, lv_indev_data_t * data) {
  if(key_pressed()) {
     data->key = my_last_key();            /* Get the last pressed or released key */
     data->state = LV_INDEV_STATE_PRESSED;
  } else {
     data->state = LV_INDEV_STATE_RELEASED;
  }
}

Keys

There are some predefined keys which have special meaning:

The most important special keys in your read_cb() function are:

You should translate some of the read keys to these special keys to support navigation in a group and interact with selected widgets.

Key remapping

Some applications require assigning physical buttons to multiple key events depending on the context: arrow keys may be used in a screen to navigate across widgets, and used to interact with one widget in another screen. Key remapping functionality of indev can be used to implement this behavior.

You must first define a remapping callback, then invoke lv_indev_set_key_remap_cb() to enable it.

lv_key_t remap_left_right_into_prev_next(lv_indev_t * indev, lv_key_t key)
{
    LV_UNUSED(indev);

    switch (key) {
    case LV_KEY_LEFT:
        return LV_KEY_PREV;
    case LV_KEY_RIGHT:
        return LV_KEY_NEXT;
    default:
        return key;
    }
}
/* in your setup code */
lv_indev_set_key_remap_cb(indev, remap_left_right_into_prev_next);

/* later, to disable remapping */
lv_indev_set_key_remap_cb(indev, NULL);

Note

The remap callback is invoked only for keypad input devices. It will not remap keys from other input device types.