EditTextがあり、setOnKeyListenerを使用してキーストロークをリッスンしようとしているので、Enterキーが押されたことを検出すると、何らかのアクションが実行されます。ハードキーボードとエミュレーターでは正常に動作しますが、GalaxyNexusでは動作しません。
setOnKeyListenerのドキュメントには、「ソフトウェア入力メソッドでキーを押しても、通常、このリスナーのメソッドはトリガーされない」と記載されていますが、その理由は説明されています。
「最初のアプリの作成」チュートリアルのように、画面に「完了」ボタンを明示的に追加したくありません。
これで、レイアウトxmlのプロパティを使用するように設定しましたandroid:inputType="text"
が、目的の効果があるようです。これは正しいアプローチと見なされますか?それはどこかに文書化されていますか?すべてのデバイスで動作しますか?もっと良い方法はありますか?
アクティビティで使用しているコードは次のとおりです。
myEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Process the entered text here
myEditText.setText("");
return true;
}
return false;
}
}
これは、 ProfessionalAndroid4アプリケーション開発の第4章のToDoリストの例に基づいています。