即使连接了硬件键盘,也显示软键盘

War*_*ock 21 keyboard android kiosk-mode android-softkeyboard android-input-method

有没有办法显示连接USB键盘的软件键盘(在我的情况下是RFID阅读器)?
我试图使用InputManager强制显示它(带有这些或类似的参数),但没有运气

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Run Code Online (Sandbox Code Playgroud)

重要提示 - 我知道状态/系统栏中有一个按钮可以显示它,但用户(Kiosk应用程序)看不到此按钮.

And*_*ris 18

即使存在硬键盘,您也需要覆盖onEvaluateInputViewShown()上的InputMethodService方法以评估为true.见onEvaluateInputShown()和软输入视图部分InputMethodService.尝试创建自己的自定义InputMethodService类以覆盖此方法.

编辑:onEvaluateInputShown()来源应该有所帮助.解决方案应该像创建自己的类一样简单,该类扩展InputMethodService并覆盖这一个方法,该方法只有几行.确保将自定义服务添加到清单中.

来源:

"覆盖它以控制何时应向用户显示软输入区域.默认实现仅在没有硬键盘或键盘被隐藏时显示输入视图.如果更改返回的内容,则需要调用updateInputViewShown ()自己每当返回的值可能已经改变,以便重新评估和应用它."

public boolean onEvaluateInputViewShown() {
     Configuration config = getResources().getConfiguration();
     return config.keyboard == Configuration.KEYBOARD_NOKEYS
             || config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES;
}
Run Code Online (Sandbox Code Playgroud)

以下是您可以检查的可能配置.Configuration.KEYBOARD_NOKEYS对应没有硬件键盘.如果没有硬件键盘或硬件键盘被隐藏,则此方法返回true(应显示软键盘).删除这两个检查并简单地返回true应该使软件键盘可见,即使连接了硬件键盘也是如此.

尝试(未测试):

public boolean onEvaluateInputViewShown() {
     return true;
}
Run Code Online (Sandbox Code Playgroud)

由于此返回值不会更改,因此您无需自己调用updateInputViewShown().如果以不同方式修改此方法,请务必记住此详细信息.

  • 有什么方法可以让我们将这个自定义inputmethodservice保持在应用程序的本地,而不是让它在设置中可见?我们可以只为我们的应用程序使用私有输入法,使其对其他应用程序不可见吗? (3认同)
  • 我按照该过程从 InputMethodService 扩展一个类并在 Manifest.xml 中声明一个服务,但没有任何反应。物理键盘仍然阻止显示软键盘。 (2认同)