显然,基础FMX库已经这样做,因为它“知道”何时显示虚拟键盘以及何时隐藏它。
我的问题是我正在将RFID标签阅读器(OTG设备)插入Android,Android正在“看到”它作为物理键盘。这意味着一旦插入RFID标签阅读器,虚拟键盘就不会出现!
我做的是设置
VKAutoShowMode := TVKAutoShowMode.Never; // inside project.dpr
然后在
TfrmMain.TEdit1CanFocus(Sender: TObject; var ACanFocus: Boolean);
begin
ShowVirtualKeyBoard(TfmxObject(Sender));
end;
这很好,VK在Edit1获得焦点时显示。但现在,如何在不再需要时隐藏键盘?
如果我使用Edit1OnExit
,VK会在VK显示之后隐藏(因为显示键盘实际上会使焦点远离编辑)。
procedure TfrmMain.Edit1Exit(Sender: TObject);
begin
HideVirtualKeyBoard;
end;
最终,解决方案是再增加一个VKAutoShowMode
选项:
VKAutoShowMode := TVKAutoShowMode.Anyways;
但我不能等到有人决定参与此活动(Android 6.0?)
有没有人更好地了解如何插入物理键盘即可实现VK自动化?
procedure ShowVirtualKeyboard(Control: TFmxObject);
var
FService: IFMXVirtualKeyboardService;
begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) then
begin
if not (TVirtualKeyBoardState.Visible in FService.VirtualKeyBoardState) then
FService.ShowVirtualKeyboard(Control);
end;
end;