How to NOT close keyboard when DONE on keyboard is pressed
android, android-softkeyboard, java
Solution
if your return `true` from your `onEditorAction` method, action is not going to be handled again. In this case you can return `true` to not hide keyboard when action is `EditorInfo.IME_ACTION_DONE`.
Problem
When the user presses "Done" on the soft keyboard, the keyboard closes. I want it so that it will only close if a certain condition is true (eg. the password was entered correctly). This is my code (sets up a listener for when the "Done" button is pressed): ``` final EditText et = (EditText)findViewById(R.id.et); et.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE) { if (et.getText().toString().equals(password)) // they entered correct { // log them in } else { // bring up the keyboard getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); } } return false; } }); ``` I realize that the reason this doesn't work is probably because it runs this code before it actually closes the soft keyboard on its own, but that's why I need help. I don't know another way. A possible topic for answers could be working with: ``` activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { ``` and that sort of thing, but I don't know for sure. SOLUTION: ``` EditText et = (EditText)findViewById(R.id.et); et.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE) { if (et.getText().toString().equals(password)) // they entered correct { // log them in return false; // close the keyboard } else { Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); return true; // keep the keyboard up } } // if you don't have the return statements in the if structure above, you // could put return true; here to always keep the keyboard up when the "DONE" // action is pressed. But with the return statements above, it doesn't matter return false; // or return true } }); ```