awtk开发实践——学习篇9:edit示例(单行编辑器控件)
作者:互联网
说明:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
QQ 群 号:513683159 【相互学习】
内容来源:
官方的手册(免费获取)Pxx=该手册的对应页码xx
github-awtk
说明
awtk开发实践——学习篇7:创建简单工程(方式二:基于HelloWorld.Xml-Demo工程)
按照上篇创建工程后:
①将label.c
文件替换为edit.c
文件。
②在awtk-c-demo工程中/res/assets/default/raw/ui
目录下搜索:kb,将其相关kb*.xml文件,全部复制到awtk-simple工程中.(实际有部分用不到),如下:
kb_int.xml、kb_uint.xml、kb_float.xml、kb_ufloat.xml、kb_hex.xml、kb_phone.xml、kb_default.xml、kb_ascii.xml、kb_ascii_t9.xml、kb_default_t9.xml、kb_default_t9ext.bin、kb_default_t9ext.xml
关于 edit控件(单行编辑器控件) 介绍,对应书P101。(书中还有更详细内容)
①基于 SDL 的平台,单行编辑器控件使用平台原生的输入法,对于嵌入式平台使用内置的输入法。
②使用内置的输入法时,软键盘由输入类型决定,开发者可
以自定义软键盘的界面。
③edit_t
是widget_t
的子类控件,widget_t
的函数均适用于edit_t 控件。
④edit_t
控件中光标的颜色取的是样式文件中该控件的text_color
;若没有设置text_color
,则默认是黑色。
⑤edit_t
本身可以做为容器,放入按钮等控件。有几个特殊的子控件:
名为"clear"的按钮。点击时清除编辑器中的内容
名为"inc"的按钮。点击时增加编辑器的值,用于实现类似于 spinbox 的功能
名为"dec"的按钮。点击时减少编辑器的值,用于实现类似于 spinbox 的功能
名为"visible"的复选框。勾选时显示密码,反之不显示密码
关于 keyboard控件(软键盘) 介绍,对应书P170。(书中还有更详细内容)
软键盘是一个特殊的窗口,由编辑器通过输入法自动打开和关闭。编辑器输入类型和软键盘 UI 资源文件的对应关系。
edit.c
#include "awtk.h"
static ret_t on_changed(void* ctx, event_t* evt) {
widget_t* target = WIDGET(evt->target);
log_debug("%s changed\n", target->name);
return RET_OK;
}
static ret_t on_action_event(void* ctx, event_t* evt) {
widget_t* target = WIDGET(evt->target);
log_debug("%s action event\n", target->name);
return RET_OK;
}
static ret_t on_changing(void* ctx, event_t* evt) {
widget_t* target = WIDGET(evt->target);
str_t str;
str_init(&str, 0); //初始化字符串对象
str_from_wstr(&str, widget_get_text(target)); //获取该控件的文本去初始化字符串
log_debug("%s: %s\n", target->name, str.str);
str_reset(&str); //重置字符串为空
return RET_OK;
}
/* 单行编辑器控件创建函数 */
widget_t* create_edit(widget_t* win, int type, const char* name, const wchar_t* text, int x, int y,
int w, int h) {
widget_t* edit = edit_create(win, x, y, w, h); //创建edit对象
widget_on(edit, EVT_VALUE_CHANGED, on_changed, NULL); //注册指定事件的处理函数
widget_on(edit, EVT_VALUE_CHANGING, on_changing, NULL); //注册指定事件的处理函数
edit_set_input_tips(edit, name); //设置编辑器的输入提示
//等效于edit_set_tips(edit, name);
edit_set_input_type(edit, type); //设置编辑器的输入类型
return edit;
}
static ret_t on_click(void* ctx, event_t* e) {
widget_t* edit1 = WIDGET(ctx);
widget_set_text(edit1,L"中文 比 如 打 一 个 汉 字 加 一 个 空 格 再 打 一 个 汉 字 a b c 123");
//设置edit1的文本:为字符串中内容
return RET_OK;
}
ret_t application_init() {
widget_t* edit1 = NULL;
widget_t* edit2 = NULL;
widget_t* edit3 = NULL;
widget_t* edit4 = NULL;
widget_t* win = window_create(NULL, 0, 0, 0, 0); //创建window对象
widget_t* button = button_create(win, 0, 0, 0, 0); //创建button对象
edit1 = create_edit(win, INPUT_TEXT, "text[3-32]", L"abc", 10, 10, 228, 30);
widget_set_name(edit1, "edit1"); //设置控件的名称:edit1
edit_set_text_limit(edit1, 3, 32); //设置为文本输入及其长度限制,不允许输入超过32个字符,少于3个字符时进入error状态
edit_set_action_text(edit1, "Test"); //设置软键盘上action按钮的文本
widget_on(edit1, EVT_IM_ACTION, on_action_event, NULL); //注册指定事件的处理函数
edit_set_focus(edit1, TRUE); //设置为焦点
edit2 = create_edit(win, INPUT_INT, "int auto fix[1-100]", L"", 10, 50, 228, 30);
widget_set_name(edit2, "edit2"); //设置控件的名称:edit2
edit_set_int_limit(edit2, 1, 100, 1); //设置为整数输入及取值范围:最小1,最大100,步长1
edit_set_auto_fix(edit2, TRUE); //设置编辑器是否为自动改正
edit3 = create_edit(win, INPUT_FLOAT, "float[1-10]", L"1.23", 10, 90, 228, 30);
widget_set_name(edit3, "edit3"); //设置控件的名称:edit3
edit_set_float_limit(edit3, 1, 10, 1); //设置为浮点数输入及取值范围:最小1,最大10,步长1
create_edit(win, INPUT_PASSWORD, "password", L"", 10, 10 + 128, 228, 30);
widget_set_name(edit4, "edit4"); //设置控件的名称:edit4
edit4 = create_edit(win, INPUT_TEXT, "text", L"readonly", 10, 50 + 128, 228, 30);
edit_set_readonly(edit4, TRUE); //设置编辑器是否为只读
create_edit(win, INPUT_HEX, "hex", L"", 10, 90 + 128, 228, 30);
create_edit(win, INPUT_CUSTOM, "custom", L"", 10, 130 + 128, 228, 30);
widget_set_text(button, L"SetText"); //设置按键控件的文本:SetText。
widget_set_self_layout_params(button, "c", "b:60", "40%", "30");//设置控件自己的布局(缺省布局器)参数(过时,请用widget_set_self_layout)。
widget_on(button, EVT_CLICK, on_click, edit1); //注册指定事件的处理函数
widget_layout(win); 布局当前控件及子控件
return RET_OK;
}
控件名 | 输入类型 | 备注 |
---|---|---|
edit1 | 文本 | |
edit2 | 整数 | |
edit3 | 浮点数 | |
无名 | 密码 | |
edit4 | 文本 | 只读 |
无名 | 16进制整数 | |
无名 | 使用自定义的软键盘 (如计算器等应用不希望弹出系统软键盘)。 |
所有的单行编辑器控件均设置两种触发事件:
①EVT_VALUE_CHANGED
:控件的值改变的事件
②EVT_VALUE_CHANGING
:控件的值持续改变(如编辑器正在编辑)的事件名
自定义软键盘,故不会弹出系统软键盘,由于未定义,故没有弹出任何键盘。
按钮控件设置了点击事件:EVT_CLICK
,若点击按键则会将edit1
控件上的字修改为:中文 比 如 打 一 个 汉 字 加 一 个 空 格 再 打 一 个 汉 字 a b c 123
执行过程:
1.生成资源:sh assets_gen.sh
,添加新资源故需重新生成资源。
2.编译:scons
3.执行:./bin/demo
实现效果:
input_type_t:输入类型常量定义表
标签:控件,widget,set,示例,edit,edit1,编辑器 来源: https://blog.csdn.net/weixin_42645653/article/details/120816140