onKeyDown の基本アクティビティで単純なオーバーライドを行うと、Enter キーと Dpad の中央ボタン以外のすべてのキーの押下をキャプチャできます (ブレークポイントで決定)。理由はわかりません-誰かが状況に光を当てることができますか?
編集: クイック アップデート - Dpad センターをキャプチャし、キーの長押しを入力しますが、通常のプレスではありません。
onKeyDown の基本アクティビティで単純なオーバーライドを行うと、Enter キーと Dpad の中央ボタン以外のすべてのキーの押下をキャプチャできます (ブレークポイントで決定)。理由はわかりません-誰かが状況に光を当てることができますか?
編集: クイック アップデート - Dpad センターをキャプチャし、キーの長押しを入力しますが、通常のプレスではありません。
この質問はすでにかなり古いことを知っていますが、絶望的なコーダーが迷子になった場合に備えて、回答を投稿します。
USBキーボードにも同様の問題がありました。EditText ボックス以外がフォーカスされている場合、ENTER キーは onKeyUp または onKeyDown によって捕捉されませんでした。
dispatchKeyEvent() を使用すると、ウィンドウに到達する前に KeyEvent を取得できます。私の場合、間違いなく ENTER キーを取得します。ただし、注意してください。イベントは 2 回呼び出されます。1 回はキー ダウン、もう 1 回はキー アップです。
ここにサンプルコード:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
System.out.println(event.getAction() + " " + event.getKeyCode() + " - " + (char) event.getUnicodeChar());
return true;
}
ドキュメントを読みましたか?
ソフトウェア キーボードでキーを押しても、通常はこのリスナーはトリガーされませんが、状況によってはそうすることが選択される場合もあります。ソフトウェアキーの押下をキャッチするためにこれに依存しないでください。
また、キーをキャプチャする方法は非常にあいまいです。次を使用して送信されたkeyCodeをチェックしていません。
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { return false; }
ビューから onKey を処理できます。
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
/* This is a sample for handling the Enter button */
return true;
}
return false;
}
OnKeyListener を実装し、リスナーを設定することを忘れないでください
viewname.setOnKeyListener(this);