82

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.

Janusz
  • 187,060
  • 113
  • 301
  • 369
Khawar Raza
  • 15,870
  • 24
  • 70
  • 127

5 Answers5

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.......

Community
  • 1
  • 1
Sunil
  • 3,785
  • 1
  • 32
  • 43
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