Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Xe7 Android:如何显示VK,即使存在';这是一个插入的物理键盘_Android_Delphi_Keyboard - Fatal编程技术网

Delphi Xe7 Android:如何显示VK,即使存在';这是一个插入的物理键盘

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

显然,底层FMX库已经做到了这一点,因为它“知道”何时显示虚拟键盘以及何时隐藏虚拟键盘

我的问题是,我正在将RFID标签阅读器(OTG设备)插入Android,而Android将其视为一个物理键盘。这意味着一旦插入RFID标签阅读器,虚拟键盘就不会出现

然后我所做的就是设定

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;