2

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

我想防止键盘自动被隐藏。

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

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

4

1 回答 1

0

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

Android 类通常提供事件处理程序,您可以在子类化它们时实现。该类Activity具有以下事件处理程序:

  • 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)

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

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

在您activityview类中覆盖onKeyDownoronKeyUp方法并在其中隐藏软键盘,例如:

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) {}
}    

于 2019-01-24T09:28:44.580 回答