How to implement Multiline EditText with ActionDone button (without Enter button)

Ruslan picture Ruslan · Mar 31, 2016 · Viewed 16.4k times · Source

I have EditText which is used for entering contents on messages (emails, sms). I want message to be immediately posted on ActionDone button click. I use following code for this:

message.setOnEditorActionListener((textView, i, keyEvent) -> {
            switch (i) {
                case EditorInfo.IME_ACTION_DONE:
                    if (messageCanBePosted()) {
                        SoftKeyboard.hide(message);
                        postMessage();
                        return true;
                    } else {
                        return false;
                    }
                default:
                    return false;
            }
        }); 

But also I want this message field to be multiline, like in any other messenger apps. I can achieve it with this line:

android:inputType="textMultiLine"

The problem is that after adding this line ActionDone button starts acting like Enter button. So my callback for catching EditorInfo.IME_ACTION_DONE is never called. So each time user press that button cursor moves to new line instead of posting message.

How can I keep both multiline behavior of EditText (ability to show text on multiple lines) and ActionDone button?

Answer

Rathi J picture Rathi J · Mar 24, 2017

Use

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);

and in XML:

android:inputType="textMultiLine"

Source : Multi-line EditText with Done action button