我有EditText,用于在消息(电子邮件,短信)上输入内容.我希望消息能够立即发布在ActionDone按钮上.我使用以下代码:
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;
}
});
但我也希望这个消息字段是多行的,就像在任何其他信使应用程序中一样.我可以用这条线来实现它:
android:inputType="textMultiLine"
问题是添加此行后,ActionDone按钮开始像Enter按钮一样.所以我永远不会调用捕获EditorInfo.IME_ACTION_DONE的回调.因此,每次用户按下该按钮光标移动到新行而不是发布消息.
如何保持EditText的多行行为(在多行显示文本的能力)和ActionDone按钮?
解决方法:
最后,在这里搜索类似的线程后,我找到了解决方案.只需要在Activity / Fragment上添加以下行:
editText.setHorizontallyScrolling(false);
editText.setMaxLines(Integer.MAX_VALUE);
出于某种原因,如果您从xml应用完全相同的设置,它将不起作用.你应该以编程方式进行.
还有另一种可能的解决方案 – 从EditText派生并手动应用EditorInfo.IME_ACTION_DONE.但对我来说,首先解决方案看起来更简单