热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

awtk开发实践——学习篇10: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_twidget_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"); //设置控件的名称:edit1edit_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"); //设置控件的名称:edit2edit_set_int_limit(edit2, 1, 100, 1); //设置为整数输入及取值范围:最小1,最大100,步长1edit_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"); //设置控件的名称:edit3edit_set_float_limit(edit3, 1, 10, 1); //设置为浮点数输入及取值范围:最小1,最大10,步长1create_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:输入类型常量定义表

在这里插入图片描述


推荐阅读
author-avatar
手机用户2602921813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有