Implicit "Submit" after hitting Done on the keyboard at the last EditText

Android

Android Problem Overview


I've used some apps where when I fill my username, then go to my password, if I hit "Done" on the keyboard, the login form is automatically submitted, without me having to click the submit button. How is this done?

Android Solutions


Solution 1 - Android

Try this:

In your layout put/edit this:

<EditText
    android:id="@+id/search_edit"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:singleLine="true"
    android:imeOptions="actionDone" />

In your activity put this (e. g. in onCreate):

 // your text box
 EditText edit_txt = (EditText) findViewById(R.id.search_edit);

 edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
     @Override
	 public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
	     if (actionId == EditorInfo.IME_ACTION_DONE) {
		     submit_btn.performClick();
			 return true;
		 }
	     return false;
	 }
 });

Where submit_btn is your submit button with your onclick handler attached.

Solution 2 - Android

Simple and effective solution with Kotlin

Extend EditText:

fun EditText.onSubmit(func: () -> Unit) {
    setOnEditorActionListener { _, actionId, _ ->
       
       if (actionId == EditorInfo.IME_ACTION_DONE) {
           func()
       }

       true

    }
}

Then use the new method like this:

editText.onSubmit { submit() }

Where submit() is something like this:

fun submit() {
    // call to api
}

More generic extension

fun EditText.on(actionId: Int, func: () -> Unit) {
    setOnEditorActionListener { _, receivedActionId, _ ->

       if (actionId == receivedActionId) {
           func()
       }

        true
    }
}

And then you can use it to listen to your event:

email.on(EditorInfo.IME_ACTION_NEXT, { confirm() })

Solution 3 - Android

You need to set the IME Options on your EditText.

<EditText
    android:id="@+id/some_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Whatever"
    android:inputType="text"
    android:imeOptions="actionDone" />

Then add a OnEditorActionListener to the view to listen for the "done" action.

EditText editText = (EditText) findViewById(R.id.some_view);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            // TODO do something
            handled = true;
        }
        return handled;
    }
});

Official API doc: https://developer.android.com/guide/topics/ui/controls/text.html#ActionEvent

Solution 4 - Android

This is how it is done

editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if(actionId == EditorInfo.IME_ACTION_DONE){
            //do something
        }
        return false;
   }
});

Don't forget to add following

<EditText android:layout_height="wrap_content"

    android:layout_width="wrap_content"

    android:imeOptions="actionDone"/>

actionDone in your EditText.

Solution 5 - Android

In your XML file inside your edittext tag add below snippet

android:imeOptions="actionDone"

Then inside your Java class, write the below code

editText.setOnEditorActionListener(new EditText.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int id, KeyEvent event) { 
        if (id == EditorInfo.IME_ACTION_DONE) { 
            //do something here 
            return true;
        }
        return false; 
    } 
});

Solution 6 - Android

add the following line in edittext

android:imeOptions="actionDone"

Happy coding

Solution 7 - Android

etParola = (EditText) findViewById(R.id.etParola); 
 btnGiris = (Button) findViewById(R.id.btnGiris);
  etParola.setOnEditorActionListener(new EditText.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    btnGiris.performClick();
                    return true;
                }
                return false;
            }
        });

 and;


layout xml etParola
android:imeOptions="actionDone" add

Solution 8 - Android

Just extend this answer

fun EditText.onSubmit(func: () -> Unit) {
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            clearFocus() // if needed 
            hideKeyboard()
            func()
        }
        true
    }
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}

Solution 9 - Android

<EditText
    android:id="@+id/signinscr_userName"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/userName"
    android:imeOptions="actionNext" />

<EditText
    android:id="@+id/signinscr_password"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/password"
    android:imeOptions="actionDone"
    android:inputType="textPassword" />

in the java file

EditText userNameField = (EditText) findViewById(R.id.signinscr_userName);
EditText passwordField = (EditText) findViewById(R.id.signinscr_password);

passwordField.setOnEditorActionListener(new OnEditorActionListener() {
    public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
        //Do your operation here.
        return false;
    }
});

Solution 10 - Android

 EditText edit_txt = (EditText) findViewById(R.id.search_edit);

 edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// which is u had set a imeoption
         if (actionId == EditorInfo.IME_ACTION_DONE) {
             submit_btn.performClick();
             return true;
         }
         return false;
     }
 });

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKaloyan RoussevView Question on Stackoverflow
Solution 1 - AndroidHariharanView Answer on Stackoverflow
Solution 2 - AndroidFrancesco DonzelloView Answer on Stackoverflow
Solution 3 - AndroidflxView Answer on Stackoverflow
Solution 4 - AndroidJitender DevView Answer on Stackoverflow
Solution 5 - AndroidMadhu KumarView Answer on Stackoverflow
Solution 6 - AndroidSenthil JSView Answer on Stackoverflow
Solution 7 - AndroidRabia AydoğduView Answer on Stackoverflow
Solution 8 - AndroidbitvaleView Answer on Stackoverflow
Solution 9 - AndroidAmit GuptaView Answer on Stackoverflow
Solution 10 - AndroidDivyesh KevadiyaView Answer on Stackoverflow