Android EditText.setOnEditorActionListener回调IME_ACTION_UNSPECIFIED
EditText.setOnEditorActionListener回调IME_ACTION_UNSPECIFIED
当给EditText设置了imeOptions和setOnEditorActionListener之后,有时点击键盘上的回车【ENTER】键时,actionId有时回调的值是IME_ACTION_UNSPECIFIED,而不是期望的其它Action(如:IME_ACTION_DONE),有很大的可能是EditText的回车键响应了换行(有可能实际上无法换行)或其他。
解决方案是指定EditText的android:singleLine="true",即明确禁止EditText的内容换行
函数设置代码如下:
EditText et_search = findViewById(R.id.et_search);
et_search.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.i(TAG, "onEditorAction: " + actionId + " " + event);
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
return true;
}
return false;
}
});
当没有限制时
<!--没有加android:singleLine="true"-->
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="48dp"
android:hint="actionSearch"
android:imeOptions="actionSearch" />
//打印日志为
onEditorAction: 0 KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ENTER }
当加上android:singleLine="true"时,回调函数能正常响应
<!--加上android:singleLine="true"-->
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="48dp"
android:hint="actionSearch"
android:imeOptions="actionSearch"
android:singleLine="true" />
//点击键盘上的【ENTER】键后,打印日志为
onEditorAction: 3 null
说明当EditText内容无法换行时(如:android:singleLine="true",android:inputType="number"等 ),android:imeOptions设置才起作用

浙公网安备 33010602011771号