Android : 如何防止硬键盘输入时隐藏软键盘

Android : How to prevent softkeyboard hidden when hardwarekeyboard input

我创建了 EditText 并将其应用于 InputMethodManagershowSoftInput。 当我输入物理键时,键盘自动隐藏

我想防止键盘自动隐藏。

下面的方法我试过了。 1. 使用 showSoftInput Flag ImputMethodManager.SHOW_IMPLICIT, SHOW_FORCED 2.在EditText中使用InputConnectionWrapper,字符串和数字正常工作。但是 ctrl、Tab、Alt、F1、F2。输入一个键隐藏键盘。

我希望输入物理键时键盘不会被隐藏。 感谢阅读。

一个好的选择是当有来自硬件键盘的输入时关闭软键盘

Android classes通常会提供事件处理器,你可以在subclassing时实现。 Activity class 具有以下事件处理程序:

  • onKeyDown(int keyCode, KeyEvent event)
  • onKeyLongPress(int keyCode, KeyEvent event)
  • onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
  • onKeyShortcut(int keyCode, KeyEvent event)
  • onKeyUp(int keyCode, KeyEvent event)

此外,所有视图都有以下事件处理程序:

  • onKeyDown(int, KeyEvent)
  • onKeyUp(int, KeyEvent)

我想还有许多其他 class 具有类似的关键事件事件处理程序,但这应该足以满足您的情况。 KeyEvent 然后包含有关按下的键的信息,即键码。

在你的情况下你可能想做这样的事情:

在你 activityview class 覆盖 onKeyDownonKeyUp 方法和 像这样隐藏软键盘:

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
        hideSoftKeyboard()
        return super.onKeyUp(keyCode, event)
}

或者您可以为编辑文本添加 keyListener

mEditText.setOnKeyListener { v, keyCode, event ->
       hideSoftKeyboard()
       return@setOnKeyListener when (keyCode) {
           KeyEvent.ACTION_UP -> {
               hideSoftKeyboard()
               true
           }
           else -> false
       }
}

如何关闭软关键字:

fun hideSoftKeyboard() {
   try {
        val inputMethodManager = getSystemService(
            Activity.INPUT_METHOD_SERVICE
        ) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(
            currentFocus!!.windowToken, 0)
    } catch (e: Exception) {}
}