Захватить выполненное действие на программной клавиатуре без редактирования текста? - PullRequest
0 голосов
/ 05 июня 2019

В моем приложении есть веб-просмотр, который отображает некоторый контент.На одном из этих экранов есть текстовое поле для заполнения. Я хочу сделать снимок, когда пользователь нажимает кнопку «Готово» на клавиатуре, но нет текста для редактирования, чтобы добавить слушателя тоже.Как я могу запечатлеть действие вне зависимости от устройства и клавиатуры?

Я пробовал это без особой удачи. EditText с textPassword inputType, но без Softkeyboard

android: Softkeyboard выполняет действие при нажатии клавиши Done

@Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_ENTER:
                // code here
                break;
            default:
                return super.onKeyUp(keyCode, event);
        }
        return true;
    }

Мой класс переопределяет KeyEvent.Обратный вызов, но вышеупомянутая функция onKeyDown никогда не вызывается.

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Создание пользовательского веб-просмотра, переопределение onCreateInputConnection для установки опции ime и типа ввода для клавиатуры, переопределение dispatchKeyEvent для получения ключевых событий, отфильтровывающих его

Пример:

class MyWeb@JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0) : WebView(context, attrs, defStyleAttr) {

override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection {
    val inputConnection = BaseInputConnection(this, false)
    return inputConnection
}

override fun dispatchKeyEvent(event: KeyEvent): Boolean {
    super.dispatchKeyEvent(event)
    val dispatchFirst = super.dispatchKeyEvent(event)
    if (event.action == KeyEvent.ACTION_UP) {
        when (event.keyCode) {
            KeyEvent.KEYCODE_ENTER -> {
                Toast.makeText(context,"Hii",Toast.LENGTH_LONG).show()
                //callback?.onEnter()
            }
        }
    }
    return dispatchFirst
}

}

и XML

<com.example.MyWeb
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:id="@+id/web"
/>`

Источник: https://medium.com/@elye.project/managing-keyboard-on-webview-d2e89109d106

1 голос
/ 05 июня 2019

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

То, как работает клавиатура на Android, связано с видом. В этом представлении должна быть реализована функция getInputConnection (), возвращающая объект, который позволит приложениям вызывать функции (через AIDL). Одна из этих функций вызывается для «клавиши действия» (кнопка «Готово»). В реализации InputConnection по умолчанию это вызовет прослушиватель, зарегистрированный в связанном представлении.

Поскольку вы имеете дело с веб-просмотром здесь, я не думаю, что есть способ сделать это напрямую. То, что вы можете попробовать, это создать подкласс WebView для ActionKeyWebView. Добавьте функцию для регистрации интерфейса слушателя ключа действия. Переопределите getInputConnection, чтобы вернуть собственный подкласс InputConnectionWrapper, и оберните super.getInputConnection (). Затем переопределите executeEditorAction, чтобы вызвать любого слушателя, зарегистрированного для веб-просмотра. Это довольно много кода, но он должен работать.

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