我创建了一个简单的 FMX 表单(在 Delphi Tokyo 10.2.1 中),上面有 3 个控件:
TLayout
(LayoutKbd) - 与屏幕底部对齐。身高 1。TRectangle
- 与底部对齐(在 TLayout 上方)。身高 5。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
的. 但由于没有显示布局的高度,虚拟键盘覆盖了部分备忘录。TRectangle
TMemo
我可能遗漏了一些非常基本的东西。我的问题是:
- 如何获得虚拟键盘的高度?
- 试图从边界获得高度我做错了什么吗?(我也尝试过从中获取高度
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 应用程序中使用它,它完美无缺!