Android - Как показать пользовательскую клавиатуру

Я добавил пользовательскую клавиатуру в свое приложение. Правильно работает при использовании другого приложения с текстовым вводом. Я изменил settings / language and input, чтобы он был включен и также использовался по умолчанию.

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

Как я могу заставить клавиатуру отображаться? Я видел несколько способов сделать это, используя манифест, используя диспетчер методов ввода и т. д., но ни один из них не работал в моем случае. Должен ли я сфокусировать ввод, чтобы клавиатура отображалась? Разве я не могу просто показать это и скрыть, когда захочу?

Спасибо.

РЕДАКТИРОВАТЬ: мне удалось показать клавиатуру, добавив текстовый ввод и щелкнув по нему. Но я до сих пор понятия не имею, как показать это без ввода текста.


person Virus721    schedule 10.12.2015    source источник


Ответы (1)


Вы сказали, что это уже по умолчанию. Таким образом, вы можете просто сделать так, чтобы он отображался вручную:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

Чтобы скрыть это:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);

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

ИЗМЕНИТЬ

Вы также должны запросить фокус:

yourEditText.requestFocus()
person Ruchir Baronia    schedule 10.12.2015
comment
Спасибо за вашу помощь, но я попробовал этот способ, а также несколько других вариантов (toggleSoftInput, showSoftInput и т. д.). Это не работает для нескольких людей, кажется. - person Virus721; 10.12.2015
comment
@ Virus721 Кажется, у меня есть для тебя решение. Попробуйте добавить это: yourEditText.requestFocus();. Наверное, теперь это должно работать! - person Ruchir Baronia; 10.12.2015
comment
Да, использование фокуса запроса работает, спасибо. Но мне также нужно добавить: dummyTextView.setFocusable(true); dummyTextView.setFocusableInTouchMode(true); как указано в этом ответе: stackoverflow.com/questions/9311563/ Пожалуйста, добавьте это к своему ответу. К сожалению, я не могу заменить текстовое редактирование своим пользовательским видом чертежа, иначе этот код больше не работает. Думаю, мне придется где-то хранить скрытый ввод. Это грязно, и я удивлен, что Android не дает возможности сделать это легко и чисто. - person Virus721; 10.12.2015
comment
@ Virus721 Да, это плохой способ сделать это! - person Ruchir Baronia; 10.12.2015
comment
Также это не работает, если текст редактирования не виден или если мы находимся в ландшафтном режиме. - person Virus721; 10.12.2015
comment
Невидимый...? Когда вы делаете его невидимым? - person Ruchir Baronia; 10.12.2015
comment
Я не хочу показывать этот текст редактирования, поэтому я изменяю его видимость в XML, но это приводит к тому, что этот способ отображения клавиатуры больше не работает. - person Virus721; 10.12.2015
comment
Тогда почему вы хотите показать клавиатуру в первую очередь? - person Ruchir Baronia; 10.12.2015