Могу ли я использовать Android InputMethodManager на пользовательской клавиатуре в приложении?

InputMethodManager — это служба, которую приложения могут использовать для взаимодействия с системными клавиатурами. Такие редакторы, как EditText, также используют его для косвенного уведомления клавиатур об изменениях (например, updateSelection).

Я могу получить ссылку на InputMethodManager вот так

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

Моя проблема в том, что это похоже только на системные клавиатуры. Могу ли я использовать InputMethodManager для настраиваемой клавиатуры в приложении? Если бы это было только для одного изолированного приложения, мне было бы все равно, но я включаю пользовательскую клавиатуру в библиотеку, которая будет использоваться во многих приложениях. Мне нужен стандартный способ общения редакторов с клавиатурой.

Должен ли я писать свой собственный менеджер методов ввода или есть способ использовать стандартную InputMethodManager с моей пользовательской клавиатурой в приложении?

Обновить

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


person Suragch    schedule 20.07.2017    source источник
comment
Я решил пойти по пути создания собственного менеджера методов ввода. Я не думаю, что можно использовать систему InputMethodManager, потому что это связано с проблемами безопасности телефона. Тем не менее, я добавил награду, чтобы убедиться, прежде чем полностью отказаться от этой идеи.   -  person Suragch    schedule 31.08.2017


Ответы (2)


Вы должны реализовать свои.

InputMethodService предоставляет стандартную реализацию InputMethod, от которой можно получить и настроить окончательные реализации. См. базовый класс AbstractInputMethodService и интерфейс InputMethod для получения дополнительной информации об основах написания методов ввода.

person devgianlu    schedule 02.09.2017

Нет, ты не можешь. Потому что, если вы наследуете от InputMethodService, ваша клавиатура будет доступна для других приложений. Есть только один способ создать клавиатуру в приложении — использовать простую View в раскладке. В этом примере пользовательская клавиатура в приложении используется InputMethodManager для подключения к EditText.

person vmtrue    schedule 03.09.2017
comment
Извините, в первый раз ошибся и не понял вашего вопроса. Я обновил свой ответ. - person vmtrue; 04.09.2017
comment
Пример, на который вы ссылаетесь, является моим примером. Он не использует InputMethodManager для подключения к EditText. Он просто подключается напрямую. Но я хотел использовать InputMethodManager, что и привело к этому вопросу здесь. - person Suragch; 04.09.2017
comment
@Suragch Без наследования от InputMethodManager вы не можете получить доступ к клавиатуре - person vmtrue; 05.09.2017