Android: как предотвратить скрытие программной клавиатуры при вводе с аппаратной клавиатуры

Я создал EditText и применил его к showSoftInput из InputMethodManager. Когда я ввожу физическую клавишу, клавиатура автоматически скрывается.

Я хочу, чтобы клавиатура не скрывалась автоматически.

Я пробовал метод ниже. 1. используйте флаг showSoftInput ImputMethodManager.SHOW_IMPLICIT, SHOW_FORCED 2. используйте InputConnectionWrapper в EditText, строка и число работают нормально. но Ctrl, Tab, Alt, F1, F2. Ввод клавиши скрывает клавиатуру.

Я ожидаю, что клавиатура не будет скрыта, когда я ввожу физическую клавишу. Спасибо за чтение.


comment
см. этот stackoverflow.com/questions/1845285/   -  person nyulan    schedule 24.01.2019


Ответы (1)


хороший вариант — просто закрыть программную клавиатуру при вводе данных с аппаратной клавиатуры

Классы 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 содержит информацию о нажатой клавише, то есть код клавиши.

в вашем случае вы можете сделать что-то вроде этого:

в вашем классе activity или view переопределите методы onKeyDown или onKeyUp и скройте там программную клавиатуру, например:

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

или вы можете добавить keyListener для вашего edittext

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

как закрыть softKeyword:

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

person alireza easazade    schedule 24.01.2019
comment
Я также пытался блокировать ключевые события. Однако, чтобы изменить язык, параметр языка должен быть отправлен как событие. В этом случае виртуальная клавиатура скрыта. - person Joon; 24.01.2019
comment
Если ввести клавишу на физической клавиатуре, я хочу предотвратить автоматическое скрытие виртуальной клавиатуры. Вместо этого я думаю, что только предотвратить скрытие виртуальных клавиатур, потому что такие клавиши, как изменение языка, не могут быть запущены, если блокируют события в середине. - person Joon; 25.01.2019