Android中EditText同时支持textMultiLine与imeOptions(action/actionSend/...)
Android中EditText同时支持textMultiLine与imeOptions(action/actionSend/...)
在Android中,如果想要imeOptions起作用,则要求android:singleLine="true"或者android:inputType="text",此时不能多行显示内容,即使插入\n,内容也是显示在一行。形如:
<EditText
android: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设置的值却不起作用了。形如:
<EditText
android: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实现换行,但可以通过另外插入\n换行),需要在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);
或者,直接在JAVA代码里面这样写
//以下代码顺序不能错
etNone.setImeOptions(EditorInfo.IME_ACTION_SEND);
etNone.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
etNone.setSingleLine(false);
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);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
InputConnection ic = super.onCreateInputConnection(outAttrs);
outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
return ic;
}
}
然后在XML代码里面这样使用:
<com.example.test.ActionEditText
android: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

浙公网安备 33010602011771号