Firemonkey:当VKAutoShowMode为Never时,软键盘弹出

时间:2019-04-04 20:09:41

标签: android delphi keyboard firemonkey

我有一个大型的firemonkey android应用程序,该应用程序主要用于条形码扫描仪设备,但也必须在例如一部Android手机(用于测试)。在条形码扫描仪设备上使用时,通常 有物理键盘,我们通过将VKAutoShowMode设置为TVKAutoShowMode.Never来抑制虚拟键盘。

这对于大多数Tedit组件都适用。但是,对于其中的1个或2个(它们的意图和目的与其他意图“相同”),当从物理键盘接收到按键时,虚拟键盘会弹出。而且,通过在相关Tedit上设置KillFocusByReturn的返回键,不容易消除该错误。

我可以使用Android语言和输入设置来有效地完全禁用虚拟键盘,从而解决该问题,但这并不理想,因为在某些领域,我们确实希望软键盘能够简化Alpha输入。

我也可以通过在onkeyup事件中针对问题Tedit调用“ HideVirtualKeyboard”例程来实现部分解决方法,但这在键盘闪烁然后消失时看起来很愚蠢。 另外,如果在将焦点移至问题Tedit之后又移至应用程序中的另一TTabItem,则按下物理键盘上的按键将弹出虚拟键盘,因此必须采取特殊措施来消除它。

任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我已经使用RFID读取器完成了一些项目,最终我自己需要控制键盘。这是我的一个项目中的相同代码:

else if TabControl1.ActiveTab = tsRFID then
  begin
    {$ifdef NORFIDTYPING}
    VKAutoShowMode := TVKAutoShowMode.Never; // hide virtual keyboard
    {$endif}

应该注意的是,以下代码并不总是能说明事实:

function TfrmAppMain.KeyBoardVisible: Boolean;
var
  FService : IFMXVirtualKeyboardService;
begin
  Result := False;
  TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
  if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then
    Result := True;
end;