Delphi Xe7 Android:如何显示VK,即使存在';这是一个插入的物理键盘
显然,底层FMX库已经做到了这一点,因为它“知道”何时显示虚拟键盘以及何时隐藏虚拟键盘 我的问题是,我正在将RFID标签阅读器(OTG设备)插入Android,而Android将其视为一个物理键盘。这意味着一旦插入RFID标签阅读器,虚拟键盘就不会出现 然后我所做的就是设定Delphi Xe7 Android:如何显示VK,即使存在';这是一个插入的物理键盘,android,delphi,keyboard,Android,Delphi,Keyboard,显然,底层FMX库已经做到了这一点,因为它“知道”何时显示虚拟键盘以及何时隐藏虚拟键盘 我的问题是,我正在将RFID标签阅读器(OTG设备)插入Android,而Android将其视为一个物理键盘。这意味着一旦插入RFID标签阅读器,虚拟键盘就不会出现 然后我所做的就是设定 VKAutoShowMode := TVKAutoShowMode.Never; // inside project.dpr 然后在 TfrmMain.TEdit1CanFocus(Sender: TObject; var
VKAutoShowMode := TVKAutoShowMode.Never; // inside project.dpr
然后在
TfrmMain.TEdit1CanFocus(Sender: TObject; var ACanFocus: Boolean);
begin
ShowVirtualKeyBoard(TfmxObject(Sender));
end;
这很好,当Edit1接收到焦点时,VK就会显示出来。但是现在,当不再需要键盘时,我该如何隐藏它呢
如果我使用Edit1OnExit
,VK会在VK显示之后隐藏(因为显示键盘实际上会使焦点从编辑中移开)
最终,解决方案是增加一个VKAutoShowMode
选项:
VKAutoShowMode := TVKAutoShowMode.Anyways;
但我不能等到有人决定关注这个(安卓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;
procedure ShowVirtualKeyboard(控件:TFmxObject);
变量
FService:IFMXVirtualKeyboardService;
开始
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService,IInterface(fsservice));
如果(FService nil)那么
开始
如果不是(TVirtualKeyBoardState.Visible在fsService.VirtualKeyBoardState中),则
FService.ShowVirtualKeyboard(控制);
终止
终止
这是否仅在Firemonkey应用程序中发生?还是所有的应用程序都会出现这种情况?VCL应用程序中没有虚拟键盘。这个问题是特定于Android上的FMX。。。经过一些调查,我真的应该收回这个问题:这项任务根本无法完成。问题出在硬件/操作系统级别。如果你有一个可插拔键盘(或设备识别为键盘的RFID阅读器),即使你指示它这样做,VK simple也不会显示。我不是问VCL,我是问你Android设备上的其他应用程序。我不会撤回这个问题——让其他人知道它是否可以完成是很有用的。没有人被否决或投票关闭。@Jerrydoge现在我明白了你的问题,答案是:是的,所有应用程序都会这样。当RFID阅读器插入micro usb端口时,Android会认为RFID阅读器是一个硬件键盘,而VK不会显示。然而,如果我拔下RFID阅读器,VK会立即显示,反之亦然。因此,虽然这对用户来说很不方便(插入/拔出),但它仍然是可用的。我已经订购了一个USB供电的OTG集线器,看看这是否会有所不同。谢谢
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;