问题
I'm creating a simple typing game in Android. I have no problem getting input from the physical keyboard, but now I'm trying to get the soft keyboard to appear without the EditText. So far, I've tried the following:
1. EditText with visibility="invisible" and this line:
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed
2. This line in the onCreate()
:
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
This method actually displayed an empty white box across the bottom 10% of the screen but not the keyboard, although when I run it now it does nothing.
3. Another two lines in the onCreate()
:
InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
No luck on any of these. Is it even possible to display the soft keyboard (and then use onKeyUp
/onKeyDown
) without focusing on an EditText?
Right now, the only way I can see is to approach this is to create my own implementation of the soft keyboard (i.e. build it from scratch). Not looking forward to that!
回答1:
The following code works for me:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
I use this code in a onKeyUp handler when I press the "menu" button.
回答2:
Instead of using visibility="invisible"
you can set android:alpha="0"
on your EditText.
So you still need a EditText but it is not visible and you can get the input from the softkeyboard by an onKeyListener()
回答3:
You can force the Softkeyboard to be shown by using:
InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED);
回答4:
Make sure to enable the soft keyboard for your view:
setFocusable(true);
setFocusableInTouchMode(true);
Then call:
InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
回答5:
Note that if you are working in landscape mode, the soft input will create its own text input field ruining all your hard work. You can prevent this behavior:
// This makes us remain invisible when in landscape mode.
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Now if you have set up an invisible EditText it will remain as you made it.
来源:https://stackoverflow.com/questions/4579544/can-i-use-the-soft-keyboard-without-an-edittext