我有一个大型的firemonkey android应用程序,该应用程序主要用于条形码扫描仪设备,但也必须在例如一部Android手机(用于测试)。在条形码扫描仪设备上使用时,通常 有物理键盘,我们通过将VKAutoShowMode设置为TVKAutoShowMode.Never来抑制虚拟键盘。
这对于大多数Tedit组件都适用。但是,对于其中的1个或2个(它们的意图和目的与其他意图“相同”),当从物理键盘接收到按键时,虚拟键盘会弹出。而且,通过在相关Tedit上设置KillFocusByReturn的返回键,不容易消除该错误。
我可以使用Android语言和输入设置来有效地完全禁用虚拟键盘,从而解决该问题,但这并不理想,因为在某些领域,我们确实希望软键盘能够简化Alpha输入。
我也可以通过在onkeyup事件中针对问题Tedit调用“ HideVirtualKeyboard”例程来实现部分解决方法,但这在键盘闪烁然后消失时看起来很愚蠢。 另外,如果在将焦点移至问题Tedit之后又移至应用程序中的另一TTabItem,则按下物理键盘上的按键将弹出虚拟键盘,因此必须采取特殊措施来消除它。
任何建议,我将不胜感激。
答案 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;