Reputation: 834
I am trying to respond to pressing the enter button on a standard system on screen soft keybord, in numeric mode. keyboard appears on the screen when myCustomEditText class is given focus.
tried 2 approaches:
onKeyDown()
:public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { //do sth.. return true; } return super.onKeyDown(keyCode, event); }
setOnKeyListener
:myCustomEditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { onRightButtonClicked(); return true; } return false; } });
(also tried onKeyDown()
in myCustomEditText as well, but with no effect)
problem is:
these aproaches above works for all the keys being pressed but for the enter key - the methods are not even being fired at all. (it's not a problem of bad KeyEvent.KEYCODE_...
)
my question is: why these methods are not being fired for enter key, but are for other keys, and how to listen to enter key being pressed properly?
Upvotes: 7
Views: 6817
Reputation: 49837
You respond to ENTER differently than normal keys, try something like this:
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_DONE:
...
return true;
default:
return false;
}
}
});
You can specify which action is performed by ENTER by specifiying android:imeOptions
in XML or by calling editText.setImeOptions(...)
with one of the constants in EditorInfo
. imeOptions
also changes how the ENTER key looks! For example if you set imeOptions
to actionSearch
then the ENTER key will look like a search button.
You can find a list of all possible values for imeOptions
along with a description here.
Upvotes: 6