Android: как предотвратить скрытие программной клавиатуры при аппаратном вводе с клавиатуры - PullRequest
0 голосов
/ 24 января 2019

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

Я хочу предотвратить автоматическое скрытие клавиатуры.

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

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

1 Ответ

0 голосов
/ 24 января 2019

хороший вариант - просто закрыть экранную клавиатуру при наличии ввода с аппаратной клавиатуры

Классы 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 для вашего текста редактирования

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

...