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?
Continuing Ruslan's answer. The trick worked but there is one more thing that you need to take care of in XML.
EditText
should have input typetext
otherwiseactionDone
won't work. Default input type ofEditText
does allow user to input line breaks so inputType should be set totext
i.e.And in your java class you need to add:
Use
and in XML:
Source : Multi-line EditText with Done action button
Finally, after searching here for similar threads I have found solution. Just need to add these lines on your Activity/Fragment:
For some reason it doesn't work if you apply exact same setting from xml. You should do it programmatically.
There is also another possible solution - derive from EditText and apply
EditorInfo.IME_ACTION_DONE
manually. But for me first solution looks simpler.