Delphi FMX - Android中的虚拟键盘涵盖控制(键盘高度无效)

时间:2017-09-06 04:30:08

标签: android delphi keyboard firemonkey delphi-10.2-tokyo

我创建了一个简单的FMX表单(在Delphi Tokyo 10.2.1中),上面有3个控件:

  1. TLayout(LayoutKbd) - 与屏幕底部对齐。身高1。
  2. TRectangle - 与底部对齐(在TLayout上方)。高度5。
  3. TMemo - 与客户保持一致。
  4. 在表单的OnVirtualKeyboardShown事件中,我有以下代码:

    procedure TForm1.FormVirtualKeyboardShown(Sender: TObject;
      KeyboardVisible: Boolean; const Bounds: TRect);
    begin
      if KeyboardVisible then
      begin
        LayoutKbd.Height:=Bounds.Height;
      end;
    end;
    

    当我在Android手机上运行并触摸备忘录时,会显示虚拟键盘并触发事件。但是,Bounds.Height的值是一个随机的,大的负数(请参阅调试期间的局部变量)。

    enter image description here

    根据documentation

      

    事件处理程序的Bounds参数指定屏幕   虚拟键盘窗口的坐标

    我希望屏幕能够向我显示键盘(重叠我的TLayout),并在其上方TRectangle以及我的TMemo上方。但由于未显示布局的高度,因此虚拟键盘会覆盖备忘录的一部分。

    我有可能遗漏一些非常基本的东西。我的问题是:

    • 如何获得虚拟键盘的高度?
    • 我是否因为试图从Bounds获得高度而做错了什么? (我也尝试从Bounds.Size.Height获得高度 - 这也不起作用)
    • 是否有一种不同的/更好的方法来可靠地调整我的备忘录,以便虚拟键盘不会遮挡任何内容。

    感谢此事的任何帮助或指导。

    UPDATE 20170906:鉴于我对10.2.1东京的体验普遍不佳,我决定尝试使用10.1.2柏林的代码。有趣的是,该代码在柏林有效 - 但据报道键盘的高度恰好比应有的高出25px。因此,通过使用LayoutKbd.Height:=Bounds.Height - 25;,我可以获得键盘的确切高度。虽然这仍然是一个问题(与RSP-14004相关),但它可以使用。

    所以这看起来像东京10.2.1的错误 - 我已经在Quality Portal(RSP-19001)上提交了一张票。我对东京10.2.1的质量问题越来越感到沮丧。我们在Delphi上投入了大量资金,Embarcadero确实需要在推出主要版本时采取行动,以便它至少相对没有bug。东京似乎非常不可靠......

    更新20171201:对于Android,我强烈推荐KastriFree library by Dave Nottage,它实现了一种简单易用的基于消息的通知机制。我一直在我的Android应用程序中使用它,它完美无缺!

0 个答案:

没有答案