Android - показать / скрыть программную клавиатуру в WebView программно - PullRequest
0 голосов
/ 25 октября 2019

Мне нужно показать / скрыть программную клавиатуру Android программно в WebView. У пользователя есть кнопка, чтобы показать / скрыть его. Я прочитал несколько сообщений о том, как скрыть это, но ни одного о функции переключения, чтобы пользователь мог скрывать или показывать это по требованию и использовать только аппаратную клавиатуру, где она есть, или штрих-коды, считываемые встроенным сканером моего устройства.

1 Ответ

0 голосов
/ 29 октября 2019

Хорошо, в конце концов, никто не ответил мне, поэтому я нашел обходной путь. Это не лучший вариант, но, по крайней мере, в моем случае проблема решена. Мне нужно было отключить / включить клавиатуру по требованию (через функциональную клавишу на защищенном устройстве Zebra), что усложняет задачу, заключается в том, что эта функция должна работать с WebView, где программно нет простого (... иливсе) способ получить доступ к любому элементу управления EditText, встроенному в него. Работа не идеальна и не элегантна, но она работает для меня, поэтому я хотел поделиться с другими, которые, возможно, сталкиваются с похожими проблемами. Прежде всего мы должны обнаружить прикосновения внутри WebView (в KOTLIN):

       webView.setOnTouchListener(object : View.OnTouchListener {
            override fun onTouch(v: View, m: MotionEvent): Boolean {

                if (!keybEnabled) {

                    hideKeyboard()
                }

                return false
            }
        })

Затем я добавил запланированное задание для скрытия клавиатуры:

    private fun hideKeyboard() {

        Handler().postDelayed({

            val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.hideSoftInputFromWindow(webView.getWindowToken(), 0)

        }, 200)
    }

Метод hideKeyboard () будетпринудительно скрывать клавиатуру до тех пор, пока пользователь не нажмет кнопку, чтобы включить ее (флаг keybEnabled == true).

У этого решения есть 2 недостатка. 1) Если вы уменьшите задержку до значения, близкого к 100 мс, возможно, что программная клавиатура будет скрыта до того, как Android запустит задачу для ее отображения, поэтому она не будет работать. Для моей ситуации достаточно 200 мс, как в примере, но это зависит от производительности устройства. 2) Иногда программная клавиатура появляется на экране в течение нескольких миллисекунд, а затем исчезает (только когда пользователь нажимает на EditText).

Если пункт 2 не является для вас проблемой, это решение должно работать нормально. Надеюсь, что это поможет другим.

ОБНОВЛЕНИЕ

Я нашел немного другое решение, которое решает также внешний вид клавиатуры, описанный выше. Именно по этой ссылке Решение для обработчика .

ЗАКЛЮЧИТЕЛЬНЫЕ СООБРАЖЕНИЯ

Я думаю, что управление софт-клавиатурой в Android ужасно, ононевероятно, что после стольких лет он все еще основан на такой громоздкой логике. Нет функции, которая бы просто отключала / включала программную клавиатуру программно и для всех элементов управления текущей активности, еще хуже, что нет какой-либо функции SDK, которая возвращает статус программной клавиатуры (отображается / скрывается). Я думаю, что это просто неприемлемо, потому что я не думаю, что команда разработчиков Android потратила бы больше 2 часов, чтобы предоставить такие полезные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...