I have an EditText. I want that after typing some text, when user presses the Done
key of the softkeyboard, it should directly perform some search operation which I have also implemented in a button click event.
Asked
Active
Viewed 4.1k times
82

Janusz
- 187,060
- 113
- 301
- 369

Khawar Raza
- 15,870
- 24
- 70
- 127
-
1Better way with Kotlin in this comment: https://stackoverflow.com/a/48810268/1912924 – Francesco Donzello Feb 15 '18 at 15:17
5 Answers
213
Try this
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
//do something
}
return false;
}
});

Adil Soomro
- 37,609
- 9
- 103
- 153
20
Try this
It works both for DONE and RETURN.
EditText editText= (EditText) findViewById(R.id.editText);
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER
|| actionId == EditorInfo.IME_ACTION_DONE) {
// Do your action
return true;
}
return false;
}
});

BoD
- 10,838
- 6
- 63
- 59

Silambarasan Poonguti
- 9,386
- 4
- 45
- 38
0
You catch the KeyEvent
and then check its keycode. FLAG_EDITOR_ACTION
is used to identify enter keys that are coming from an IME whose enter key has been auto-labelled "next" or "done"
if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
//your code here
Find the docs here.
Second Method
myEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
int result = actionId & EditorInfo.IME_MASK_ACTION;
switch(result) {
case EditorInfo.IME_ACTION_DONE:
// done stuff
break;
case EditorInfo.IME_ACTION_NEXT:
// next stuff
break;
}
}
});

Zar E Ahmer
- 33,936
- 20
- 234
- 300
0
Try this
This will work in both condition whether your keyboard is showing enter sign or next arrow sign
YourEdittextName.setOnEditorActionListener(new TextView.OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if(actionId== EditorInfo.IME_ACTION_DONE||actionId==EditorInfo.IME_ACTION_NEXT)
{
//Perform Action here
}
return false;
}
});
if u r facing red line then do this... import Keyevent and EditorInfo by pressing alt+enter then all the errors remove it will properly.......
0
In Kotlin use
viewBinding.editText.setOnEditorActionListener { view, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
//react to action
}
false
}
You can also return true inside 'if' braces to consume event - this way keyboard won't go down when you press done

Ariorick
- 11
- 3