[转载]FMX 程序中避免输入焦点被虚拟键盘遮挡

2015-6-6 / 0评 /

本文共计 6275 字,感谢您的耐心浏览与评论。

2015.6.3 :更完美

  • 解决了虚拟键盘隐藏后无法退出的问题;
  • 对于没有ScrollBox做底的窗体也加入了支持,自动添加一个 TLayout 而不是 TVertScrollBox(参考恢弘想法)

Delphi 提供了一个 Demo,叫 ScrollableFormDemo,要实现避免输入焦点被虚拟键盘遮挡的效果,需要写一堆的代码。也许这一切已不再重要,但是,它却没有考虑虚拟键盘隐藏的问题,在你隐藏虚拟键盘时,它没有自动回复原位,所以这一切显得更加的不完美。

为了避免每次都得写一堆代码的麻烦,我尝试换种思路来解决这一个问题,于是有了下面 vkbdhelper.pas 单元。但这个单元依然是三个字:不完美!不过我抛出来块砖,是希望将来第三方或官方能够更完美的解决这一问题。

首先说一下大概的思路:

1、订阅 TVKStateChangeMessage 消息,以得到普通的虚拟键盘状态改变消息。

2、在虚拟键盘显示后,触发一个每隔 100ms 检查一次的定时器,以便在用户主动隐藏虚拟键盘时,能够检查到它的改变。

3、如果检测到用户主动隐藏了虚拟键盘,那么自己触发一个TVKStateChangeMessage消息,这样子就回归到第 1 步正常的处理过程。也就是集中一个地方处理虚拟键盘状态的改变。

好了,思路有了,那么接下来是考虑易用性的问题:

实际上,易用性的设计一直是让人头痛的问题。我写这个单元就是为了解决系统自带的实现的不完美,虽然目前依然不是那么完美,但至少易用性上做到了我能做到的最好。你只需要在程序中的任意一个单元的 uses 里加入vkbdhelper,剩下的一句代码也不需要你去写。

接下来,还需要说啥呢?代码代表我的心~~~~

下载地址:百度网盘

为什么我说这个设计依然不完美?。

  • 需要引入这个单元。
  • 目前仅支持 Android,iOS 我没有苹果的东东,就没去测试。

转载自QDAC官网网站

声明:多春鱼吧|版权没有,违者不究|转发请注明出处

转载:转载请注明原文链接 - [转载]FMX 程序中避免输入焦点被虚拟键盘遮挡

0条回应:“[转载]FMX 程序中避免输入焦点被虚拟键盘遮挡”

发表评论