Могу ли я использовать программную клавиатуру без EditText? - PullRequest
15 голосов
/ 02 января 2011

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

1. EditText с visibility = "invisible" и этой строкой:

((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?

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

Ответы [ 5 ]

5 голосов
/ 05 августа 2011

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

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

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

3 голосов
/ 26 ноября 2012

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

2 голосов
/ 11 февраля 2012

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

setFocusable(true);
setFocusableInTouchMode(true);

Затем позвоните:

InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
2 голосов
/ 02 января 2011

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


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

1 голос
/ 13 апреля 2013

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

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

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

...