android - Firemonkey:当 VKAutoShowMode 为 Never 时弹出软键盘
问题描述
我有一个大型 firemonkey android 应用程序,它主要用于条码扫描仪设备,但也必须可用于例如 android 手机(用于测试)。当在通常具有物理键盘的条形码扫描仪设备上使用时,我们通过将 VKAutoShowMode 设置为 TVKAutoShowMode.Never 来抑制虚拟键盘。
这适用于大多数 Tedit 组件。但是,对于其中的 1 或 2 个 - 就所有意图和目的而言,它们与其他“相同” - 当从物理键盘接收到按键时,虚拟键盘会弹出。此外,通过在相关 Tedit 上设置 KillFocusByReturn 使用返回键不容易消除它。
我可以使用 Android 语言和输入设置来解决这个问题,以有效地完全禁用虚拟键盘,但这并不理想,因为在某些领域我们确实希望软键盘用于更简单的 alpha 输入。
我还可以通过在问题 Tedit(s) 的 onkeyup 事件中调用我们的“HideVirtualKeyboard”例程来实现部分解决方法,但是当键盘闪烁然后消失时,这看起来很愚蠢。此外,如果一个人在关注问题 Tedit 后移动到应用程序中的另一个 TTabItem,则物理键盘上的按键将弹出虚拟键盘,并且必须采取特殊措施来摆脱它。
我将不胜感激任何建议。
解决方案
我已经使用 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;
推荐阅读
- modelica - 从 Dymola 导出具有大参数数组的 FMU
- c - 我无法弄清楚我是如何错误地创建了这个文件的
- python - python中的枕头矩形不让我有足够的论据
- php - 如何在 Drupal 8 的 hook_views_pre_execute 中将查询结果限制为 0?
- asp.net-core - 如何绑定通过列表加载的选项的值
- inno-setup - 将 Inno Setup 许可证备忘录切换到 RTL 模式
- node.js - Nodejs,一个未知的值被传递给了验证函数,但我找不到有什么问题
- react-native - React Native RefreshControl 组件闪烁/闪烁
- bi-publisher - Java 空堆栈异常 - JD Edwards BI Publisher 子模板
- http - 对错误 URL 的请求使我的 golang http 请求使我的主线程崩溃