Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RTGUI如何实现像android那样的软键盘,用于输入法使用?
发布于 2013-02-06 13:04:36 浏览:8064
订阅该版
RTGUI如何实现像android那样的软键盘,用于输入法使用?
查看更多
28
个回答
默认排序
按发布时间排序
prife
2013-02-06
这家伙很懒,什么也没写!
楼上的问题可以等价于===怎么用C语言实现windows操作系统? 这样的问题都太大了。没办法回答。
greato
2013-02-06
这家伙很懒,什么也没写!
简单的说,就是怎么通过单击text控件调出软键盘,单击键盘上面的按键实现text控件的文本输入。软键盘用什么控件比较合适?
grissiom
2013-02-06
这家伙很懒,什么也没写!
要说说完全像安卓那样的软键盘,现在的 RTGUI(或者是RTT)还不支持。但是如果只是需要软键盘的话,分享一个我自己用过的。不到五十行代码,实现了一个数字键盘。因为屏幕尺寸不够,应用也不需要,所以不支持小数点,不支持字母。因为应用场景里这一屏只会往一个控件里输入,所以就手工设置了一下焦点。如果不用,这个可以去掉。因为软键盘的应用场景千变万化,所以需要自己改改~这里只是抛砖引玉了~ ;p ``` static void num_key_hd(struct rtgui_object *obj, struct rtgui_event *eve) { RT_ASSERT(obj); RT_ASSERT(eve); rtgui_widget_focus(RTGUI_WIDGET(target_widget)); struct rtgui_event_kbd ekey; RTGUI_EVENT_KBD_INIT(&ekey); ekey.wid = the_main_win; ekey.type = RTGUI_KEYDOWN; struct rtgui_button *btn = RTGUI_BUTTON(obj); if (RTGUI_LABEL(btn)->text[0] == 'B') { ekey.key = RTGUIK_BACKSPACE; } else { ekey.key = RTGUI_LABEL(btn)->text[0]; } rtgui_server_post_event((struct rtgui_event*)&ekey, sizeof(ekey)); } ... EXPORT struct rtgui_widget* create_softkeyboard_tab(void) { ... for (int i = 0; i < 11; i++) { char num[3]; if (i == 10) { num[0] = 'B'; num[1] = 'K'; num[2] = ' '; } else { num[0] = '0'+i; num[1] = ' '; } struct rtgui_button *btn = rtgui_button_create(num); rect.x1 = rect.x2 + 10; rect.x2 = rect.x1 + 40; if (i == 10) { rect.x2 += 60; } rtgui_widget_set_rect(RTGUI_WIDGET(btn), &rect); RTGUI_WIDGET(btn)->flag &= ~RTGUI_WIDGET_FLAG_FOCUSABLE; rtgui_button_set_onbutton(btn, num_key_hd); rtgui_container_add_child(syscnt, RTGUI_WIDGET(btn)); if (i == 5) { rect.x1 = rect.x2 = 5; rect.y1 = rect.y2 + 10; rect.y2 = rect.y1 + 40; } } ... ```
greato
2013-02-07
这家伙很懒,什么也没写!
我的意思是说rtgui如何实现当单击textbox控件,lcd下面出现软键盘,单击软键盘的按键相应字符显示到对应的textbox控件上,就是像android系统那样的方式?软键盘如果是window控件的话,不管是modal还是非modal好像都不能实现这种效果,不知道我说的对吗?
grissiom
2013-02-07
这家伙很懒,什么也没写!
G 兄可想好了,如果要安卓那样挤占屏幕的软键盘,那么应该考虑: 1,动画。这个在现有的基础上不是不能实现,只是需要自己用 timer 写。 2,因为原有的屏幕被挤占了,必须要有手势把原有的控件“拉”下来才能看到原有控件的其他部分。这个现有的框架不支持。Patch welcomed ;P 如果不挤占屏幕,用 Toplevel 的非 modal 窗口应该可以实现,但是自己没有试过,LZ 可以试试。但是,这会覆盖掉原有窗口的一大部分,UE 要设计好~
greato
2013-02-07
这家伙很懒,什么也没写!
软键盘肯定要覆盖原有window的一部分,我的问题是软键盘有什么形式来实现,如果用modal window的方式,那么原window下的textbox控件不能得到focus,如果用非modal window,那么当textbox控件得到focus的时候,原有window见覆盖软键盘window,以上是我对rtgui的理解,不对的地方请指出,那么不用window实现能用什么方式实现呢。 动画部分不是太大的问题,可以实现像android那样,闪入闪出和指滑的效果。只是电阻屏不像电容屏那样效果明显而已。
greato
2013-02-07
这家伙很懒,什么也没写!
还有要考虑把软键盘做成一个控件,这样可以在任何程序中调用了
grissiom
2013-02-07
这家伙很懒,什么也没写!
>软键盘肯定要覆盖原有window的一部分,我的问题是软键盘有什么形式来实现,如果用modal window的方式,那么原window下的textbox控件不能得到focus,如果用非modal window,那么当textbox控件得到focus的时候,原有window见覆盖软键盘window,以上是我对rtgui的理解,不对的地方请指出,那么不用window实现能用什么方式实现呢。 >动画部分不是太大的问题,可以实现像android那样,闪入闪出和指滑的效果。只是电阻屏不像电容屏那样效果明显而已。 --- 用 window 的话要用非模态的。但是可以用 toplevel 的窗口,也就是始终在最上面的窗口,create 的时候在 style 里或上 RTGUI_WIN_STYLE_ONTOP。 确定指滑效果很容易实现?愿闻其详;D
grissiom
2013-02-07
这家伙很懒,什么也没写!
>还有要考虑把软键盘做成一个控件,这样可以在任何程序中调用了 --- 嗯,个人感觉这个事情比较难…… 每个人的屏幕大小不一样,上面需要放哪些键也不一样(有的场景只要数字的,有的场景要带小数点的,要负号的……),所以排布规则也不一样…… 而且,软键盘做成控件,就肯定不会有安卓的效果了 ;P
greato
2013-02-08
这家伙很懒,什么也没写!
用toplevel窗口可以吗,我看看code里面是怎么实现的。 软键盘如果做成控件,肯定是标准的形式,比如像android一样的,如果是自己定制的肯定需要自己修改的。 指滑可以实现的,只不过在电阻屏上面效果不如电容屏好。
撰写答案
登录
注册新账号
关注者
0
被浏览
8.1k
关于作者
greato
这家伙很懒,什么也没写!
提问
6
回答
14
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
基于RT-Thread的STM32F4开发第四讲——硬件定时器更新中断(缺失补齐教程)
2
基于RT-Thread的STM32F4开发第三讲——DAC
3
Wireshark抓包EtherCAT报文
4
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE 原理讲解
5
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
821
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部