如何使用ActionDonebutton实现Multiline EditText(无Enterbutton)

我有用于input消息(电子邮件,短信)内容的EditText。 我想要消息立即张贴在ActionDonebutton上点击。 我使用下面的代码:

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; } }); 

但是,我也希望这个消息字段是多行的,就像任何其他的Messenger应用程序。 我可以用这一行来实现它:

 android:inputType="textMultiLine" 

问题是,添加这行后,ActionDonebutton开始像inputbutton。 所以我从来没有调用捕获EditorInfo.IME_ACTION_DONEcallbackEditorInfo.IME_ACTION_DONE 。 所以每次用户按下该button光标移动到新行而不是发布消息。

如何保持EditText的多行为(能够在多行显示文本)和ActionDonebutton?

Solutions Collecting From Web of "如何使用ActionDonebutton实现Multiline EditText(无Enterbutton)"

最后,在这里search相似的线程后,我find了解决办法。 只需要在你的Activity / Fragment中添加这些行就可以了:

 editText.setHorizontallyScrolling(false); editText.setMaxLines(Integer.MAX_VALUE); 

出于某种原因,如果您从xml应用完全相同的设置,则不起作用。 你应该以编程方式进行。

还有另一种可能的解决scheme – 从EditText派生并手动应用EditorInfo.IME_ACTION_DONE 。 但对我来说,第一个解决scheme看起来更简单

继续鲁斯兰的回答。 这个技巧很有效,但是还有一件事需要在XML中处理。

EditText应该有inputtypes的text否则actionDone将无法正常工作。 EditText默认inputtypes允许用户input换行符,所以inputType应该设置为text

 android:inputType="text" //And of course android:imeOptions="actionDone" 

而在你的java类中,你需要添加:

 editText.setHorizontallyScrolling(false); 

使用

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

和XML:

 android:inputType="textMultiLine" 

来源: 多行EditText与完成操作button