6

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

  1. TLayout(LayoutKbd) - 与屏幕底部对齐。身高 1。
  2. TRectangle- 与底部对齐(在 TLayout 上方)。身高 5。
  3. TMemo- 与客户保持一致。

在表单的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是一个随机的、大的负数(请参阅调试期间的本地变量)。

在此处输入图像描述

根据文档

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

我希望屏幕向我显示键盘(与我TLayout的. 但由于没有显示布局的高度,虚拟键盘覆盖了部分备忘录。TRectangleTMemo

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

  • 如何获得虚拟键盘的高度?
  • 试图从边界获得高度我做错了什么吗?(我也尝试过从中获取高度Bounds.Size.Height- 这也不起作用)
  • 是否有一种不同/更好的方法可以可靠地调整我的备忘录大小,以便虚拟键盘不会掩盖它。

感谢您在此问题上的任何帮助或指导。

更新 20170906:鉴于我对 10.2.1 Tokyo 的总体体验不佳,我决定在柏林 10.1.2 中尝试代码。有趣的是,该代码在柏林有效——但据报道,键盘的高度恰好比应有的高出 25 像素。所以通过使用LayoutKbd.Height:=Bounds.Height - 25;,我得到了键盘的确切高度。虽然这仍然是一个问题(与RSP-14004相关),但它是可以使用的。

所以这似乎是 Tokyo 10.2.1 的一个错误——我已经在 Quality Portal ( RSP-19001 ) 上提交了一张票。我对东京 10.2.1 的质量问题越来越感到沮丧。我们在 Delphi 上花了很多钱,而 Embarcadero 在推出主要版本时确实需要齐心协力,这样它至少相对没有错误。东京好像很不靠谱……

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

4

0 回答 0