Android中EditText同时支持textMultiLine与imeOptions(action/actionSend/...)
在Android中,如果想要imeOptions起作用,则要求android:singleLine="true"或者android:inputType="text",此时不能多行显示内容,即使插入\n,内容也是显示在一行。形如:
<EditTextandroid:id="@+id/et_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:imeOptions="actionSend"android:inputType="text"android:singleLine="true" />
而想要多行文字,则可以不设置android:singleLine或者android:inputType,又或者android:inputType="textMultiLine"等等,但是此时android:imeOptions设置的值却不起作用了。形如:
<EditTextandroid:id="@+id/et_multi"android:layout_width="match_parent"android:layout_height="wrap_content"android:imeOptions="actionSend"android:inputType="textMultiLine"android:maxLines="1"android:singleLine="false" />
1.在java代码里面直接设置
如果想要在imeOptions起作用的时候同时支持显示多行文本(当然此刻不能使用ENTER实现换行功能了),需要在XML代码里面不设置相关代码,并在JAVA代码里面这样设置:
etText.setImeOptions(EditorInfo.IME_ACTION_SEND);
etText.setRawInputType(InputType.TYPE_CLASS_TEXT);
//or
etNone.setImeOptions(EditorInfo.IME_ACTION_SEND);
etNone.setRawInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
2.或者自定义一个EditText类,实现onCreateInputConnection方法:
package com.example.test;import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;public class ActionEditText extends EditText {public ActionEditText(Context context) {super(context);}public ActionEditText(Context context, AttributeSet attrs) {super(context, attrs);}public ActionEditText(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic InputConnection onCreateInputConnection(EditorInfo outAttrs) {InputConnection ic = super.onCreateInputConnection(outAttrs);outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;return ic;}
}
然后在XML代码里面这样使用:
<com.example.test.ActionEditTextandroid:id="@+id/et_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:imeOptions="actionSend"/>
参考链接https://exchangetuts.com/multi-line-edittext-with-done-action-button-1639497243952289