佳句本天成 妙手偶得之 解决某些输入法软件导致XE的安卓程序无法退出的问题。
一直以来,XE编写出的安卓程序和中文输入法都有冲突,一旦打开了输入法,哪怕输入的是英文,都会导致程序响应按键的所以事件失效,还导致按返回键,程序无法退出,我之前用了 “爱吃猪头肉 & Flying Wang” 的方法来解决了这个问题,不过这个方法不完美,在修复了上面的问题的同时,又增加了一个在输入法界面出现时,按返回键会退出窗口的毛病。今天有空,就专门来解决这个问题,本以为会花很多时间,没想到才写了几句代码就较完美地解决了这个问题。真的应了那句古话 - 佳句本天成 妙手偶得之
解决的方法和例子在下面可下载到。里面有两个例子,一个是解决程序无法退出的例子,一个是解决文字被输入法遮挡作后,自动上浮和还原的例子。
http://pan.baidu.com/s/1dENF5b7
下面是简单的说明,详细说明请看例子和相关的链接。
本例子是演示如何自适应手机的大小自动缩放,还有字符在被输入法拦住时,如何自动上浮。
本例子是用在xe10.1自带的例子,ScrollableForm,来改的,不同点是,该例子没有实现点虚拟键盘的最小化隐藏按钮回复滚动了的窗口的功能,而本例子实现了。
本例子还解决了一个xe自一代到十代都没处理的问题,就是和主流的中文输入法冲突的问题,
我们常用的输入法,搜狗、百度、讯飞等,在键盘隐藏时,没有给出当前的状态事件,导致XE的程序判断按键事件的功能失效,也就无法响应返回键的事件而无法退出。
而一些冷门的输入法如Stylus Beta等就给出了状态事件,因而在XE的程序中能正常工作。
本例子会在软键盘隐藏时,自动补发隐藏状态消息,从而解决了这个问题。
本例子是在 “编写:爱吃猪头肉 & Flying Wang” 的基础上改进的,
http://www.dfwlt.com/forum.php?mod=viewthread&tid=1363
上面这个例子有个小问题,就是在解决了不能用返回键退出的问题后,又增加了一个在软键盘出现时,按返回键会退出窗口的毛病,
本例子修正了这个问题。让返回键能正常起作用。
本来,用Delphi的朋友有更好的解决方案,可惜我对Delphi一窍不通,移植大量的代码极为吃力,所以没用这个。
用Delphi的朋友可看这个贴子
不完美-FMX 程序中避免输入焦点被虚拟键盘遮挡
http://www.qdac.cc/?p=2541
titan_ysl 2016.07.17