Могу ли я использовать мягкую клавиатуру без EditText?

Я создаю простую типизирующую игру в Android. У меня нет проблем с вводом информации с физической клавиатуры, но теперь я пытаюсь открыть мягкую клавиатуру без EditText. До сих пор я пробовал следующее:

1. EditText с видимостью = "невидимым" и этой строкой:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed

2. Эта строка в onCreate():

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Этот метод фактически отображал пустой белый ящик через нижние 10% экрана, но не клавиатуру, хотя, когда я запускаю его сейчас, он ничего не делает.

3. Еще две строки в onCreate():

InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);

Не повезло ни одному из них. Можно ли даже отображать мягкую клавиатуру (а затем использовать onKeyUp/onKeyDown) без фокусировки на EditText?

Прямо сейчас, единственный способ, который я вижу, - это создать мою собственную реализацию мягкой клавиатуры (т.е. построить ее с нуля). Не ожидая этого!

Ответы

Ответ 1

Следующий код работает для меня:

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
 imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

Я использую этот код в обработчике onKeyUp, когда я нажимаю кнопку "menu".

Ответ 2

Вместо использования visibility="invisible" вы можете установить android:alpha="0" в свой EditText. Таким образом, вам по-прежнему нужен EditText, но он не отображается, и вы можете получить ввод с экранной клавиатуры с помощью onKeyListener()

Ответ 3

Вы можете принудительно отобразить Softkeyboard, используя:


InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED);

Ответ 4

Обязательно включите мягкую клавиатуру для просмотра:

setFocusable(true);
setFocusableInTouchMode(true);

Затем вызовите:

InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);

Ответ 5

Обратите внимание: если вы работаете в ландшафтном режиме, мягкий ввод создаст собственное поле ввода текста, разрушающее всю вашу тяжелую работу. Это можно предотвратить:

// This makes us remain invisible when in landscape mode.
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

Теперь, если вы создали невидимый EditText, он останется таким, каким вы его создали.