webdevqa.jp.net

Jelly BeanエミュレーターでEnterキーが押された後、onEditorAction()が呼び出されない

最新の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)

22
Hendrik

他の誰かがこの質問を見つけた場合:

私はこれを数回テストしましたが、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" />
35
Hendrik

これが私がやったことであり、押されているすべてのタイプの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"のみを追加しました

その理由は、ドキュメントによると:

https://developer.Android.com/reference/Android/widget/TextView.OnEditorActionListener.html#onEditorAction(Android.widget.TextView、%20int、%20Android.view.KeyEvent)

actionId int:アクションの識別子。これは指定した識別子、またはEnterキーが押されたために呼び出された場合はEditorInfo#IME_NULLのいずれかになります。

1