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() {@Overridepublic 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"-->
<EditTextandroid: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"-->
<EditTextandroid: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
设置才起作用