#java #android #ime #android-input-method
#java #Android #ime #android-метод ввода
Вопрос:
Я создаю пользовательскую клавиатуру для Android в android Studio, и я почти реализовал все основные функции, необходимые для базовой клавиатуры, но я изо всех сил пытаюсь понять, как закрыть мою клавиатуру, когда я нажимаю клавишу готово в правом нижнем углу.
В основном все текстовое поле в приложении Android содержит imeOption, указывающее действие, для которого выполняется клавиша «Готово», например android:imeOptions="actionGo"
, используется в строке URL Google Chrome и для выполнения поиска Chrome по клавише «Готово», которую я должен был использовать inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER));
, чтобы заставить ее работать, и для android:imeOptions="actionNone"
android:imeOptions="actionSearch"
этого все работало нормально inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
, но я не могу понять, что мне делать android:imeOptions="actionNext"
, и android:imeOptions="actionDone"
Ответ №1:
Это зависит от размещения представления. Как если бы это был текст редактирования и его последнее представление в иерархии представлений, тогда вы можете установить для его представления android: imeOptions =»actionDone». Это скроет клавиатуру. И android: imeOptions =»actionNext», если используется в любом представлении, тогда он переместит фокус на следующий текст редактирования, если он есть.
Надеюсь, я понял ваш вопрос. Если нет, пожалуйста, уточните. Я бы с удовольствием помог.
Комментарии:
1. Да, именно так они работают, и эти действия (закрытие клавиатуры и переключение фокуса на следующий вид) выполняются с помощью клавиши enter или клавиши готово, которая расположена в правом нижнем углу любой обычной клавиатуры. Моя проблема здесь заключалась в том, что я создаю свою собственную «пользовательскую клавиатуру», которая должна выполнять это действие, например, закрывать клавиатуру и переключать фокус на следующий вид относительно соответствующего представления, но я не могу заставить это работать на моей «пользовательской клавиатуре»
2. @RajeshNadar Не могли бы вы поделиться своим кодом? потому что таким образом было бы легко распознать проблему.
3. Я использую
InputMethodService
для своей клавиатуры иOnKeyboardActionListener
для мониторинга входных данных. Я используюonKey
функцию, чтобы проверить, какая клавиша нажата, и использую объект InputConnection для выполнения задачи над edittext вот как это делаетсяpublic void onKey(int primaryCode, int[] keyCodes) { InputConnection inputConnection = getCurrentInputConnection(); if (inputConnection != null) { switch (primaryCode) { case Keyboard.KEYCODE_DONE:
4. @RajeshNadar я не могу ответить на ваш вопрос. Если вы можете дать мне код, который я могу запустить напрямую и устранить неполадки, тогда было бы лучше
5. Как я могу поделиться с вами своим проектом?