本文导读
在有的产品上,通常没有外接电阻电容触摸,通过外接实体按键来控制UI;对于一些极简的键盘类型,如:三键键盘、五键键盘以及旋转按钮,AWTK也有对应的方案支持。这类键盘通常通过控制焦点的移动然后触发“确认/取消”功能,下面介绍设置流程:
1. 启用焦点停留
在AWTK Designer中,可以勾选focusable复选框:
勾选focusable复选框
2. 指定初始焦点
启用了焦点停留后,还需指定每个页面的初始焦点;
在C代码中,可以这样指定:
widget_set_prop_bool(widget, WIDGET_PROP_FOCUSED, TRUE);
3. 设置键盘类型
AWTK中将键盘分为三种类型:正常键盘、三键键盘和五键键盘;对于三键或五键键盘(有些变种带有数字键和功能键也归于此类)来说方向键既要用于导航(切换焦点),又要用于控件输入数据,所以需要引入一种状态(或称为模式):
在移动焦点的状态:方向键用于切换焦点; 在非移动焦点的状态:方向键用于修改控件的值;
在按钮等支持用回车键激活的控件上,用于激活按钮,相当于点击事件; 在编辑器等控件上,用于切换状态,用于改变方向键的作用;
ret_t application_init() {
system_info_set_keyboard_type(system_info(), KEYBOARD_3KEYS);
return RET_OK;
}
4.传递键值
ret_t main_loop_post_key_event(main_loop_t* l, bool_t pressed, uint8_t key);
l为main_loop_t类型的指针,固定传入main_loop() pressed为按键状态,1为按下、0为抬起 key为键值
上:TK_KEY_UP
下:TK_KEY_DOWN
左:TK_KEY_LEFT
右:TK_KEY_RIGHT
回车:TK_KEY_RETURN
1 /**
2 * \brief 收到键值
3 */
4 static void on_key_down(void)
5 {
6 char* cmd_data; // 存放命令后的数据
7 int data_len; // 存放命令后数据的长度
8 get_cmd_data(&cmd_data, &data_len); // 获取命令后的数据
9 uint8_t key = TK_KEY_UNKNOWN;
10 if(data_len == 1) { // 命令长读为1
11 switch((uint8_t)(cmd_data[0])) { // 强制转换为无符号
12 case TK_KEY_UP:
13 key = TK_KEY_UP;
14 break;
15 case TK_KEY_DOWN:
16 key = TK_KEY_DOWN;
17 break;
18 case TK_KEY_RETURN:
19 key = TK_KEY_RETURN;
20 break;
21 default:
22 break;
23 }
24 }
25 if (key != TK_KEY_UNKNOWN) {
26 main_loop_post_key_event(main_loop(), 1, key);
27 main_loop_post_key_event(main_loop(), 0, key);
28 }
29 }
30 /* 注册收到键值的回调函数 */
31 ZDP_REGISTER_CMD(keydn, on_key_down);
5.运行效果
新建简单UI
设置键盘类型为三键模式,添加协议解析器并加入解析数据和发送键值相关代码,生成固件下载至ZDP1440,实际运行效果如下:
资料分享
HMI-ZDP1440开发套件资料持续更新中,需要获取最新资料,可关注如下链接:
购买链接
HMI-ZDP1440D开发套件已在微商城上架,点击链接即可购买。
技术交流群
合作咨询
立功科技
电话|400-888-2705
芯片与智能物联解决方案供应商