[转载]FMX 程序中避免输入焦点被虚拟键盘遮挡
2015.6.3 :更完美
- 解决了虚拟键盘隐藏后无法退出的问题;
- 对于没有ScrollBox做底的窗体也加入了支持,自动添加一个 TLayout 而不是 TVertScrollBox(参考恢弘想法)
Delphi 提供了一个 Demo,叫 ScrollableFormDemo,要实现避免输入焦点被虚拟键盘遮挡的效果,需要写一堆的代码。也许这一切已不再重要,但是,它却没有考虑虚拟键盘隐藏的问题,在你隐藏虚拟键盘时,它没有自动回复原位,所以这一切显得更加的不完美。
为了避免每次都得写一堆代码的麻烦,我尝试换种思路来解决这一个问题,于是有了下面 vkbdhelper.pas 单元。但这个单元依然是三个字:不完美!不过我抛出来块砖,是希望将来第三方或官方能够更完美的解决这一问题。
首先说一下大概的思路:
1、订阅 TVKStateChangeMessage 消息,以得到普通的虚拟键盘状态改变消息。
2、在虚拟键盘显示后,触发一个每隔 100ms 检查一次的定时器,以便在用户主动隐藏虚拟键盘时,能够检查到它的改变。
3、如果检测到用户主动隐藏了虚拟键盘,那么自己触发一个TVKStateChangeMessage消息,这样子就回归到第 1 步正常的处理过程。也就是集中一个地方处理虚拟键盘状态的改变。
好了,思路有了,那么接下来是考虑易用性的问题:
实际上,易用性的设计一直是让人头痛的问题。我写这个单元就是为了解决系统自带的实现的不完美,虽然目前依然不是那么完美,但至少易用性上做到了我能做到的最好。你只需要在程序中的任意一个单元的 uses 里加入vkbdhelper,剩下的一句代码也不需要你去写。
接下来,还需要说啥呢?代码代表我的心~~~~
下载地址:百度网盘
为什么我说这个设计依然不完美?。
- 需要引入这个单元。
- 目前仅支持 Android,iOS 我没有苹果的东东,就没去测试。
转载自QDAC官网网站
本文已关闭评论