Android - Capture "Done" and "Enter" key events on soft keyboard

Lavanya picture Lavanya · May 31, 2013 · Viewed 11.5k times · Source

I have a Login page in my app where there are elements as listed:

  • username (EditText)
  • password (EditText)
  • Login (Button)

On pressing Login, it will land into the main screen. The intention is to perform that same action when the user hits Done at the completion of keying in the password on soft keyboard on Samsung Galaxy S3; and Enter key of soft keyboard on HTC One X.

So, here is how the EditText of Password field is:

<EditText
    android:id="@+id/password_txt"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="8dp"
    android:singleLine="true" />

In the Activity, whatever I tried is here:

EditText mPassword = (EditText) findViewById(R.id.password_txt);
mPassword.setOnEditorActionListener(new TextView.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER || actionId == EditorInfo.IME_ACTION_DONE){
                        Log.e("MyApp", " ------> IN EDITOR ACTION DONE");
                    }
                    return false;
                }
            });

I did try with keeping the imeOptions for the Password field as actionDone along with the flagNoExtractUi but it didn't work out.

Answer

Lavanya picture Lavanya · Jun 10, 2013

I found a solution for this in reply by Asha which seems to work fine for Samsung Galaxy S3, S3 Mini, S2, Google Nexus Tab and hopefully for all devices of Samsung. For HTC it worked on HTC Desire X so far I have checked. For HTC One X, this doesn't work. There is this actionid for which the value is 5 which captures the enter key action of the soft keypad.