Могу ли я использовать мягкую клавиатуру без 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, он останется таким, каким вы его создали.