最新のJelly Beanエミュレーターの動作に問題があります。アプリにいくつかのEditTexts
があります。 OnEditorActionListener
は、ユーザーがキーボードのEnterキーを押したときに特別な処理を提供します。これはICSまで機能していましたが、現在Jelly BeanではリスナーコールバックメソッドonEditorAction()
が呼び出されなくなりました。新しい行だけがEditText
に挿入されます。
これは次の方法で再現できます。
EditText testEditText = new EditText(context);
testEditText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.d(TAG, "onEditorAction() called");
return false;
}
});
addView(testEditText);
これはジェリービーンのバグですか?またはエミュレータで?または、行動が意図的に変更されましたか?
奇妙なことに、Jelly Beanを実行しているNexus 7で、メソッドが呼び出されたが、予期しないパラメーターが指定された他の誰かがここに記述します。 null keyevent and actionid = 0 in onEditorAction()(Jelly Bean/Nexus 7)
他の誰かがこの質問を見つけた場合:
私はこれを数回テストしましたが、Jelly Beanエミュレータでは、仮想キーボードでEnterキーが押されたときにリスナーコールバックメソッドonEditorAction()が実際に呼び出されなくなりました。
上で述べたように、可能な解決策または回避策は、Enterキーを使用可能なアクションキーの1つに置き換えることです。それらはまだonEditorAction()をトリガーします。入力タイプも指定する必要がありました。
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setImeOptions(EditorInfo.IME_ACTION_GO);
<EditText
...
Android:imeOptions="actionGo"
Android:inputType="text" />
これが私がやったことであり、押されているすべてのタイプのEnterキーをカバーしているはずです。
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL)
... // Enter pressed
XMLではAndroid:imeOptions="actionGo"
のみを追加しました
その理由は、ドキュメントによると:
actionId int:アクションの識別子。これは指定した識別子、またはEnterキーが押されたために呼び出された場合はEditorInfo#IME_NULLのいずれかになります。