LVGL官方文档-7.11.0-13-Overview-Input devices

本文介绍了InputDevice的概念及其在用户界面控制中的应用,包括指针设备、按键板和编码器的使用方式,以及如何通过预定义的按键实现导航和编辑功能。

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

Input Device通常意味着:

  • 指针类设备,如触摸板或者鼠标。
  • 按键板,如普通的键盘或者简单的按键板。
  • 能左转、右转、按下的编码器。
  • 能映射到屏幕指定区域的外置硬件按键。

Pointers

指针类设备可以有光标(如鼠标)。

...
lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv);

LV_IMG_DECLARE(mouse_cursor_icon);                          /*Declare the image file.*/
lv_obj_t * cursor_obj =  lv_img_create(lv_scr_act(), NULL); /*Create an image object for the cursor */
lv_img_set_src(cursor_obj, &mouse_cursor_icon);             /*Set the image source*/
lv_indev_set_cursor(mouse_indev, cursor_obj);               /*Connect the image  object to the driver*/

需要注意的是,光标对象需要调用lv_obj_set_click(cursor_obj, false)。但是对于Image来说,click属性是默认关闭的。

Keypad and encoder

即使没有触摸板或者鼠标,也可以用按键板或者编码器来完全控制用户界面,这类似于PC上用TAB键在应用或者网页上选择元素。

Groups

要用按键板或者编码器控制的Object需要添加到一个组里。在每个组里面都有明确的拥有焦点的对象,能够接受按键或者编码器动作。例如,如果一个Text Area拥有了焦点,然后按了按键板上的按键,那么这些按键会发送并插入Text Area中。类似的,如果Slider拥有了焦点并按了左右箭头,那么Slider的值会发生变化。

需要将输入设备和组关联才能使用。一个输入设备只能将按键发送给一个组,但是一个组可以接受多个输入设备的按键。

用lv_group_t *g = lv_group_create()来创建组,用lv_group_add_obj(g, obj)将Object添加到组里。

用lv_indev_set_group(indev, g)将组和输入设备关联,其中indev是lv_indev_drv_register的返回值。

Keys

下面是一些预先定义的有特殊含义的按键:

  • LV_KEY_NEXT 移动焦点到下一个Object
  • LV_KEY_PREV 移动焦点到上一个Object
  • LV_KEY_ENTER 引发LV_EVENT_PRESSED/CLICKED/LONG_PRESSED等事件
  • LV_KEY_UP 增加值或者向上移动
  • LV_KEY_DOWN 减少值或者向下移动
  • LV_KEY_RIGHT 增加值或者向右移动
  • LV_KEY_LEFT 减少值或者向左移动
  • LV_KEY_ESC 关闭或者退出(如关闭下拉列表)
  • LV_KEY_DEL 删除(如删除Text Area里光标右边的字符)
  • LV_KEY_BACKSPACE 删除光标左边的字符(如在Text Area中)
  • LV_KEY_HOME 跳转到开头或者顶部符(如在Text Area中)
  • LV_KEY_END 跳转到结尾(如在Text Area中)

其中,最重要的按键是LV_KEY_NEXT/PREV,LV_KEY_ENTER和LV_KEY_UP/DOWN/LEFT/RIGHT。在实现的read_cb函数中,应该将按键映射到这些特殊按键以在组内导航并与选中的Object交互。

通常只需要使用LV_KEY_LEFT/RIGHT,因为大部分的Object可以只用这两个按键进行控制。

如果是编码器,应该使用LV_KEY_LEFT,LV_KEY_RIGHT和LV_KEY_ENTER。

Edit and navigate mode

因为按键板的按键够多,所以能轻松实现在Object之间导航并用按键板进行编辑。但是编码器的按键较少,难以用默认选项进行导航。所以创造了Navigate和Edit两种模式来解决这个问题。

在Navigate模式中,编码器的LV_KEY_LEFT/RIGHT被转换成LV_KEY_NEXT/PREV,因此通过拨动编码器,可以选中上一个或者下一个Object。按下LV_KEY_ENTER将进入Edit模式。

在Edit模式中,LV_KEY_NEXT/PREV通常用于编辑Object。根据对象不同,可以用短按或者长按LV_KEY_ENTER回到Navigate模式。通常,如果Object不能按下(如Slider),短按就能推出Edit模式。如果Object短按有特殊含义(如Button),就需要长按推出Edit模式。

Styling

如果通过触摸板点击,encoder或者按键板移动获取到焦点,Object会进入LV_STATE_FOCSED状态,这样Focused状态的Style就会生效。

如果Object进入Edit模式,它就会进入LV_STATE_FOCUSED|LV_STATE_EDITED状态。在这个状态下的Style会生效。

获取详细信息,请前往Style章节。

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值